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] requêtes multiples successives


Sujet :

AJAX

  1. #1
    Membre confirmé
    Avatar de NoobX
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 195
    Par défaut [AJAX] requêtes multiples successives
    Bonjour,

    j'utilise une fonction qui me permet d'envoyer des requêtes en asynchrones jusque là pas de problèmes la fonction fonctionne ^^

    en revanche si je suis amener a lancer plusieurs fois de suite cette fonction alors seul la dernières requêtes est entièrement effectuée.

    J'ai bien compris que c'etait normal dans le sens ou j'utilise le meme objet.


    voici la fonction :
    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
     
    function charge_page(Pagecible,Params,Divcible) 
    {  
    	if (window.XMLHttpRequest) { xhr = new XMLHttpRequest(); }
    	else if (window.ActiveXObject) { xhr = new ActiveXObject("Microsoft.XMLHTTP"); }
     
    		xhr.open('POST', Pagecible, true); 
    		xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    		xhr.send(Params); 
    			xhr.onreadystatechange = function() { 
     
    				if (xhr.readyState == 4) {                   
    					if (xhr.status == 200){                  
    					document.getElementById(Divcible).innerHTML = xhr.responseText; 
    					} else { /*alert ("Erreur : " + xhr.status);*/ }
    				} else { 
    					document.getElementById(Divcible).innerHTML = "<div style='position:relative; top:25%; vertical-align:center; text-align:center;'>Chargement en cours ... <img src='images/loader.gif' style='vertical-align:middle;' /></div>";}
    }
    }
    et voila le genre d'appel
    charge_page('param1','param2','param3');
    charge_page('param1b','param2b','param3b');

    Je cherche donc une solution me permettant d'effectuer ces action tout en restant en asynchrone.

    J'ai essayer en testant l'etat de readystate mais sans succés.

    Merci d'eclairer ma lanterne ^^

  2. #2
    Membre Expert Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Par défaut
    Visiblement, ton instance de xhr est partagée par tous tes objets qui peuvent être amenés à l'utiliser simultanément. Pour éviter ca, déclare simplement ton objet xhr dans la fonction appelante plutot qu'a l'extérieur.

    ex:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function ajax()
    {
      var xhr = getXHR()
      // ...
    }
    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var xhr;
     
    function ajax()
    {
      xhr = getXHR();
    }

  3. #3
    Membre confirmé
    Avatar de NoobX
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 195
    Par défaut
    avant tout merci pour ta reponse.

    j'ai donc essayer de suivre tes conseils.
    j'ai donc "desolidariser l'objet xhr de ma fonction pour le mettre dans sa propre fonction
    getXhr :

    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
     
    function getXhr(){
    	var xhr = null; 
     
    		if(window.XMLHttpRequest)
    			xhr = new XMLHttpRequest(); 
     
    		else if(window.ActiveXObject){
    			try {
    			         xhr = new ActiveXObject("Msxml2.XMLHTTP");
    			         } catch (e) {
    			             xhr = new ActiveXObject("Microsoft.XMLHTTP");
    			         }
    			}
    			else {
    			  alert("Votre navigateur ne supporte pas Ajax");
    			  xhr = false;
    				}
                                    return xhr
    			}
    Ensuite je l'appel dans ma fonction "charge_page"

    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
    function charge_page(Pagecible,Params,Divcible) 
    {    
     
    	var xhr = getXhr()
     
     
     
    		xhr.open('POST', Pagecible, true); 
    		xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    		xhr.send(Params);
    			xhr.onreadystatechange = function() { 
     
    				if (xhr.readyState == 4) 	{                   
    					if (xhr.status == 200)	{                  
    					document.getElementById(Divcible).innerHTML = xhr.responseText; 
    											} else { /*alert ("Erreur : " + xhr.status);*/ 	}
    											} else { 
    document.getElementById(Divcible).innerHTML = "<div style='position:relative; top:25%; vertical-align:center; text-align:center;'>Chargement en cours ... <img src='images/loader.gif' style='vertical-align:middle;' /></div>";}
    																							}
    Et effectivement cela semble fonctionner comme je le desire

    J'en profite pour te poser une question toute bete si tu a du temps :
    L'objet xhr sera désormais indépendant a chauqe appel et donc je pourrais l'utiliser sans limite de manière simultanée ?

    En tous cas merci
    Je verifie que tous fonctionne bien (on sait jamais) et je mettrai le tag résolu

  4. #4
    Membre Expert Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Par défaut
    L'objet xhr sera désormais indépendant a chauqe appel et donc je pourrais l'utiliser sans limite de manière simultanée ?
    Oui, puisque sa porté est limitée à la fonction, et plus à la page (une variable globale est associée à l'objet window)

  5. #5
    Membre confirmé
    Avatar de NoobX
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 195
    Par défaut
    Bon bah je te remercie !

    J'vais essayer d'intégrer tous ca dans ma petite tete

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

Discussions similaires

  1. [AJAX] Requêtes multiples
    Par sbk.no.gaara dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 25/08/2006, 16h43
  2. [AJAX] Ajax requêtes multiples
    Par Teufboy dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/08/2006, 18h23
  3. [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
  4. [AJAX] requète sql dans js
    Par cheers94wow dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 17/05/2006, 13h24
  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