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

JavaScript Discussion :

[AJAX] Requêtes multiples


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 7
    Points : 5
    Points
    5
    Par défaut [AJAX] Requêtes multiples
    Bonjour.

    Voila je souhait effectuer un traitement plusieurs fois par le serveur avec a chaque fois un affichage du "log" sur la page du client :

    traitement1 ok
    traitement2 ok
    ...

    chaque traitement est effectué par une XMLHTTPRequest lancé dans une boucle javascript.
    Mon probleme :
    en mode synchrone : tout les traitement sont effectué et ensuite le resultat de chaque traitement est affiché.

    en mode asynchrone : toutes les requetes sont envoyé puis les resultat s'affichent au fur et a mesure des reponse. seulement, je n'arrive pas a savoir si tout mes traitement sont fini pour effectuer d'autres traitement apres ma boucle javascript.

    un peu de code :
    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
     
    function getXhr(xhr){
    		if(window.XMLHttpRequest) // Firefox et autres
    			xhr = new XMLHttpRequest(); 
    		else if(window.ActiveXObject){ // Internet Explorer 
    			try {
    				xhr = new ActiveXObject("Msxml2.XMLHTTP");
    			} catch (e) {
    				xhr = new ActiveXObject("Microsoft.XMLHTTP");
    			}
    		}else{ // XMLHttpRequest non supporté par le navigateur 
    			alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
    			xhr = false; 
    		}
    		return xhr ;
    	}
     
    	function go(station){
    		var xhr = null;
    		xhr = getXhr(xhr);
    		xhr.onreadystatechange = function(){
    			if(xhr.readyState == 4 && xhr.status == 200){
    				leselect = xhr.responseText;
    				document.getElementById(station).innerHTML = leselect;
    			}
    		}
    		xhr.open("POST","envoi_teleaction.php",true);
    		xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    		xhr.send('station='+station);
    	}
     
    	function page_charge(){
    		for (var i in listeStations ){
    			go(listeStations[i]);
    		}
    		//effectuer autre chose ici quand TOUT est fini
    	}

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 144
    Points : 129
    Points
    129
    Par défaut
    Si tu connais le nombre de traitements, places un compteur
    "Il n'y a ni gagnant ni perdant, juste des joueurs ..."

    Pensez, si vous le pouvez encore, au tag RESOLU
    Nb: Note à moi même, ne l'oublis pas sinon tu vas te faire traiter

  3. #3
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    onreadystatechange, essaie d'ajouter:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(station==listeStations[listeStations.length-1]){
    // fin des requêtes
    }

  4. #4
    Futur Membre du Club
    Inscrit en
    Février 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    cette deuxieme solution fonctionne a ceci pres que la derniere reponse reçue n'est pas forcement la reponse du dernier traitement envoyé. (certains traitement sont plus long que d'autres)

    idéalement il faudrais attendre que le traitement d'une station soit fini avant d'executer le traitement pour la station suivante.
    c'est peut-être faisable en apellant la fonction go() à l'interieur de onreadystatechange ( sorte de récursivité ). je sais pas si c'est la meilleure solution mais je vais essayer.
    Si vous avez mieux, je suis preneur.

  5. #5
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    Citation Envoyé par sbk.no.gaara
    cette deuxieme solution fonctionne a ceci pres que la derniere reponse reçue n'est pas forcement la reponse du dernier traitement envoyé. (certains traitement sont plus long que d'autres)

    idéalement il faudrais attendre que le traitement d'une station soit fini avant d'executer le traitement pour la station suivante.
    c'est peut-être faisable en apellant la fonction go() à l'interieur de onreadystatechange ( sorte de récursivité ). je sais pas si c'est la meilleure solution mais je vais essayer.
    Si vous avez mieux, je suis preneur.
    La méthode AJAX que tu utilise n'est prévue pour fonctionner qu'avec une seule requête (voir post ci-joint) et voici un méthode permettant de travailler avec plusieurs requêtes (dernier message de la discussion)
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  6. #6
    Futur Membre du Club
    Inscrit en
    Février 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    euh, sa marche toujours de la même facon, j'arrive pas a executer chaque requêtes ajax 1 par 1 en mettant a jour l'affichage (retour de la requete)

  7. #7
    Futur Membre du Club
    Inscrit en
    Février 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    en tout cas j'ai fait ma methode recursive et sa fonctionne comme j'ai besoin.
    merci a vous, bonne soirée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] mysql requête multiple
    Par Hayabusa dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 13/05/2007, 16h20
  2. [AJAX] Requête perdue si ouverture nouvelle page ?
    Par linar009 dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 31/08/2006, 09h04
  3. [AJAX] Ajax requêtes multiples
    Par Teufboy dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/08/2006, 18h23
  4. [AJAX] requéte sur un domaine différent
    Par remyli dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 10/08/2006, 14h35
  5. [requête] multiple count
    Par mandrake_of_mandregas dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 04/01/2006, 19h05

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