Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1114 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Tableau d'objets XmlHttpRequest

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Tableau d'objets XmlHttpRequest

n°2014091
madraf_tin​t
Posté le 04-08-2010 à 09:58:34  profilanswer
 

Bonjour,
 
Après recherche, je n'ai point trouvé de réponse à ce sujet.
 
Je cherche à faire un JavaScript qui doit effectuer plusieurs requêtes à l'aide de l'objet XmlHttpRequest afin d'aller chercher diverses informations dans plusieurs fichiers. Plusieurs requêtes ont donc lieu grâce à une boucle, mais seule la dernière fonctionne ; les précédentes bloquent au statut chargement (.status = 1). Comme toutes les requêtes successives étaient associées à la même variable ( xhr = new XmlHttpRequest(); ), je suppose que les appels successifs écrasaient les précédentes requêtes.
 
J'aimerais donc différencier les requêtes afin qu'elles puissent aller à leur terme en les mettant dans un tableau d'objets. J'espérais obtenir quelque chose de ce genre :
 
xhr[0] = new XmlHttpRequest();
xhr[1] = new XmlHttpRequest();
xhr[2] = new XmlHttpRequest();
...
 
En théorie, on peut créer des tableaux d'objets en JavaScript. Malheureusement, cela ne fonctionne absolument pas.
 
Voilà l'essentiel de la démarche :
 
Je crée un tableau :
 
var xhr = new array(10);     (pour une dizaine de requêtes)
 
 
Dans la boucle, j'initialise d'abord à false, puis j'affecte l'objet :
 
xhr[x] = false;
xhr[x] = new XmlHttpRequest();
if(xhr[x])
{
  xhr[x].onreadystatechange = appel de fonction;
  xhr[x].open("GET", url, true);
  xhr[x].send(null);
}
 
Dans la fonction, je récupère évidemment de la façon suivante :
 
document.getElementById("balise" ).innerHTML = xhr[x].responseText;
 
 
Comme je le disais, ça ne fonctionne pas. Pourquoi ? Et quelle solution conviendrait pour gérer plusieurs requêtes ?
 
Merci pour votre attention :)

mood
Publicité
Posté le 04-08-2010 à 09:58:34  profilanswer
 

n°2014270
tpierron
Posté le 04-08-2010 à 17:59:57  profilanswer
 

Hmm, dans ton callback tu as bien fait une closure sur la variable x ? Parce que sinon ton xhr[x] va te renvoyer null. Bref je ferais un truc du genre :
 

Code :
  1. for (var x = 0; x < 10; x ++)
  2. {
  3.    var request = new XMLHttpRequest();
  4.  
  5.    request.onreadystatechange = function() {
  6.        ma_fonction(request)
  7.        if (request.readyState == 4) delete request.onreadystatechange
  8.    }
  9.    request.open("GET", url, true)
  10.    request.send(null)
  11. }
  12.  
  13. function ma_fonction(request)
  14. {
  15.     if (request.readyState == 4)
  16.     {
  17.          document.getElementById("balise" ).innerHTML = request.responseText;
  18.     }
  19. }


n°2014335
madraf_tin​t
Posté le 05-08-2010 à 06:03:14  profilanswer
 

Je ne saisis pas ce que tu appelles "closure" sur la variable x. J'ai jeté un œil sur un tuto là-dessus, mais là, de but en blanc, c'est un peu chaud ^^ Il faudrait que je vois ça à tête reposée...
 
D'un autre côté, je ne fais pas de "delete request...", mais je doute que le problème vienne de là.
 
J'ai continué mes recherches aux sujet des requêtes multiples et il semblerait que ce soit difficile voire impossible à gérer correctement. Pour bien faire, il faudrait que les requêtes soient synchrones. Le script devrait s'arrêter et attendre sagement que la requête se termine avant de continuer sur les instructions suivantes et d'aborder la requête suivante. A priori, le troisième paramètre de la méthode à false (open("GET", url, false)) devrait permettre cela, mais il semblerait que cette option soit mal implémentée, sinon pas implémentée du tout.
 
D'autre part, il faudrait gérer des résultats de requêtes susceptibles de revenir dans n'importe quel ordre. Ce qui suppose, dans la fonction de traitement de la réponse, d'être capable de reconnaître le résultat que l'on récupère pour le traiter correctement.
 
Je vais tout de même essayer ta solution, au cas où.


Message édité par madraf_tint le 05-08-2010 à 06:03:52
n°2015922
madraf_tin​t
Posté le 10-08-2010 à 23:45:29  profilanswer
 

Pour ceux que ça intéresserait, j'ai finalement opté pour une solution qui ne requiert qu'une seule requête. Je ne savais pas qu'il était possible d'opérer une requête JavaScript sur un script PHP.
 
Du coup, tout devient simple : le JavaScript envoie la valeur du cookie vers le PHP qui peut ainsi reconnaître l'utilisateur connecté. À partir de là, il est facile de préparer toutes les données nécessaires à renvoyer de façon personnalisée sans se prendre le chou avec un paquet de requêtes JavaScript ingérables.
 
Merci tout de même pour ton aide :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Tableau d'objets XmlHttpRequest

 

Sujets relatifs
Image au-dessus d'un tableauProbleme avec un tableau structuré
Affichage d un tableau retourne par une fonctionfichier -> tableau
Ajouter des cases dans un tableau en javascript[RESOLU] Problème tableau php -> javascript
Probleme tableau multidimensionnel[CSS] transformer une charte tableau en div
EXCEL : Envoyer automatique un tableau croisé dynamique par mailA l'aide je seche sur un tableau
Plus de sujets relatifs à : Tableau d'objets XmlHttpRequest


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR