IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

[AJAX] Temporisation ajax/jquery sans callback ?


Sujet :

AJAX

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 22
    Par défaut [AJAX] Temporisation ajax/jquery sans callback ?
    Bien le bonjour à tous !

    Après moult recherches, je viens vous exposer un problème de conception pour une de mes applications en php/jquery.

    J'ai un gros traitement effectué par php en 3 étapes bien distinctes mais complémentaires. Mon objectif est d'afficher le résultat de ces trois étapes de (une progressbar et un textarea pour chacun) façon séquentielle via ajax en jquery.

    Au début j'ai imaginé un petit bench, avec trois calculs, chacun précédés d'un sleep.
    Alors, je connais la méthode en synchrone utilisant un callback, mais du coup c'est mon php qui est exécuté de façon séquentielle... Je pourrais aussi bien récupérer tout les résultats et parser le tout d'un coup de split(), mais j'affiche l'execution time dans chaque résultats et le temps d'affichage des progressbar doit être respecté et propre à ce dernier.

    Ma question est donc, existe il une alternative ?
    Je vous en remercie par avance.

  2. #2
    Membre extrêmement actif
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Août 2007
    Messages
    1 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Full-stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 1 387
    Billets dans le blog
    1
    Par défaut
    J'ai du mal à tout comprendre.

    Qu'est ce qui ne va pas dans cette méthode :

    Ajax(etape1.php) ----> [resultat1]
    -- affichage resultat1 --
    Ajax(etape2.php,resultat1) -----> [resultat2]
    -- affichage resultat2 --
    Ajax(etape3.php,resultat2) -----> [resultat3]
    -- affichage resultat3 --
    Consultant et développeur full-stack spécialiste du Web
    faq jQuery - règles du forum - faqs web

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 22
    Par défaut
    Bonsoir Golgotha,

    Merci de ton intérêt,
    ce que je cherche a faire est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     ajax call traitement.php
    php.step1 start... / progressbar en action
    ... 3s de traitement...
    php.step1 end / progressbar stoppée
    
    php.step2 start... / progressbar en action
    ...12s de traitement...
    php.step2 end / progressbar stoppée
    
    php.step3 start... / progressbar en action
    ... 5s de traitement...
    php.step3 end / progressbar stoppée
    fermeture de la connexion ajax,
    on passe à l'instruction jquery suivante dans le onSuccess

    Ma problématique c'est que je ne peux pas me permettre d'envoyer plusieurs requêtes consécutives. (comme par ex, l'astuce en synchrone avec un callback)

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 22
    Par défaut
    voici ma portion de code qui fonctionne actuellement en sync/callback, que j'essais de modifier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
        ///////////////////////////////////////
        //// GENERAL REQUESTER
        //////////////////////////////////////
     
        // request
        function exLoad(o, callback)
        {
    	if(typeof(o) === 'object' && jQuery.isPlainObject(o))
    	{
    	    // => appels construit <=
    	    if(!o.exModback)
    	    {
    		// ( appel élémentaire )
    		var call = o.getExModule;
    		var ExConf = 
    		{
    		    "window":o.getExTag({tag:'win'}),
    		    "action":o.getExTag({tag:'action'}) 
    		}
    	    }else
    	    {
    		// ( appel forgé )
    		var call = o.exModback;
    		ExConf = o;
    	    }
    	}else
    	{
    	    // => appels direct <=
    	    var call = 'crond';
    	    if(o.indexOf('&') >= 0 && o.split('&').length > 0)
    	    {
    		// appel induit
    		var params = new Array();
    		var struct = o.split('&');
    		var call = struct.shift();
    		for(arg in struct)
    		{
    		    var node = struct[arg];
    		    params.push(node.substring(node.indexOf('=')+1, node.length));
    		}
     
    		ExConf = serialize(params);alert(ExConf);
    	    }else
    		ExConf = o;
    		// appel linéaire
    	}
     
    	$.ajax(
    	{
    	    url: "services/"+call+".php",
    	    data: ExConf,
    	    success: function(data)
    	    {
    		callback(data);
    	    }
    	})
        }
     
    	// exo crond system
    	function micron()
    	{
    	    exLoad("test3", function(data)
    	    {
    		//alert(data);
    		micron(data);
    		//setTimeout(micron(0), 35000);
     
    	    });
    	}
     
    	micron();
    Ce que j'imaginais pour réaliser le schemas de mon second post,
    c'est un genre de foreach qui prendrais la sortie retournée par ajax.
    A l'appel du php je lance la première progressbar,
    et chaque fois que je reçois des data, cela me permet d'activer la progressbar suivante, jusqu'à mettre fin à la transaction lorsque je reçois un byte identifiant la fin.

    Mon idée va un peu au dela des possibilité d'ajax en lui même, j'en conviens. Mais je voulais me renseigner pour vérifier s'il existe un schemas dans ce genre possible en bricolant un peu.

    EDIT: en fait pour affiner encore un peu: le code que j'ai posté presque ce que j'ai décris ! Mais il ne le fait que pour un seul traitement.
    Lorsque mon script est appelé je ne reçois le resultat que lorsque celui ci est disponible.

    un exemple extrêmement simplifié du traitement :

    traitement.php
    sleep(5);
    echo "{mes datas...}"; // recu par ajax

    Je cherche à produire ceci :

    traitement.php
    sleep(5);
    echo "{mes datas...}"; // recu par ajax
    sleep(7);
    echo "{mes datas...}"; // recu par ajax

    or ce qui se produit quand je teste ça :

    sleep(5);
    echo "{mes datas...}";
    sleep(5);
    echo "{mes datas...}";
    // tout est recu d'un coup par ajax !!

Discussions similaires

  1. Erreur Ajax jQuery sans message d'erreur
    Par omar24 dans le forum jQuery
    Réponses: 4
    Dernier message: 08/09/2011, 11h07
  2. [AJAX] Transmettre un formulaire sans rechargement de page
    Par micka39 dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 21/11/2007, 12h20
  3. [AJAX] Temporisation requete AJAX
    Par cerede2000 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 07/06/2007, 10h00
  4. [AJAX] AJAX Chat + Server perso (Sans SQL ni fichier text)
    Par |PaRa-BoL dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 14/01/2007, 03h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo