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

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  [AJAX]Return dans un onreadystatechange

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[AJAX]Return dans un onreadystatechange

n°1490779
gelko
Posté le 13-12-2006 à 11:16:59  profilanswer
 

Bonjour,
 
je suis en train de creer une fonction qui recoit en parametre une requete SQL, execute la requete en AJAX puis renvoie un tableau, le tout en AJAX. Tout marche sauf le return pour retourner le tableua de resultats. Apparemment, la variable liste n'est pas definie dans la fonction rapportée à l'evenement onreadystatechange. Quelq'un aurait il une idée pour pouvoir renvoyer mon tableau? merci...
 
 

Code :
  1. function ajax_select(req_select){
  2. var liste = new Array();
  3. if(_xmlHttp&&_xmlHttp.readyState!=0){
  4.  _xmlHttp.abort();
  5. }
  6. _xmlHttp=getXMLHTTP();
  7.     if(_xmlHttp){
  8.    
  9.     _xmlHttp.open("GET",_adresseRecherche+"?requete="+req_select);
  10.  
  11.      
  12.     _xmlHttp.onreadystatechange=function() {
  13.      if(_xmlHttp.readyState==4 && _xmlHttp.responseXML) {
  14.      liste = traite_reponses(_xmlHttp);
  15.  
  16.      }
  17.     };
  18.    
  19.    
  20.     _xmlHttp.send(null);
  21.  
  22.     }
  23.     return(liste);
  24.    
  25. }

mood
Publicité
Posté le 13-12-2006 à 11:16:59  profilanswer
 

n°1490782
anapajari
s/travail/glanding on hfr/gs;
Posté le 13-12-2006 à 11:29:15  profilanswer
 

c'est normal que liste soit inconnue dans le onreadystatechange, tu as clairement un problème de scope avec ta variable.
Le onreadystatechange n'est pas appelé lors de l'execution de ta fonction ajax_select mais lors du changement d'état de ton objet xmlHttpRequest ( qui se produit logiquement après sa construction).

 

Bon maintenant j'imagine que tu as besoin de récupérer ton tableau pour faire autre chose. Le plus simple dans ton cas sera peut-être d'appeler cette "autre chose" à la fin de traite_reponse.

 

edit: ah un truc encore, avec une page qui reçoit en get une requête et l'execute, ça me parait juste over-dangerous


Message édité par anapajari le 13-12-2006 à 11:29:59
n°1490784
gelko
Posté le 13-12-2006 à 11:31:38  profilanswer
 

Justmeent le probleme ne peut pas etre pris dans l'autre sens... Cette fonction est une fonction outil que je vais utiliser dans plusieurs modules... L'ideal serait de pouvoir faire en sorte que la fonction associée au onreadystatechange renvoie liste et que je puisse le recuperer quelque part je pense...

n°1490803
anapajari
s/travail/glanding on hfr/gs;
Posté le 13-12-2006 à 12:16:15  profilanswer
 

Et bin fallait pas faire de l'asynchrone [:spamafote]
C'est le retour d'information (et non l'envoi) qui doit déclencher une action!  
 
Au pire du pire déclare globale ta variable mais ça resoudra que la moitié de ton problème car, même si la bonne valeur y sera mise lors du retour, tu risques d'utilisater ta variable avant celui-ci.

n°1490806
gelko
Posté le 13-12-2006 à 12:28:47  profilanswer
 

Ok, je vais utiliser un post alors... sinon pour declarer une variable globale dans js, je mets juste le var liste =new Array(); en dehors de la fonction non?

n°1490861
gelko
Posté le 13-12-2006 à 14:39:29  profilanswer
 

J'ai toruvé un moyen! Je passe en mode synchrone et ca marche! Il suffit de mettre _xmlHttp.open("GET",_adresseRecherche+"?requete="+req_select,false);
 
et plus besoin du onreadystatechange: l'execution ne se poursuit que quand le fichier xml est completement generé.

Message cité 1 fois
Message édité par gelko le 13-12-2006 à 15:05:40
n°1490863
anapajari
s/travail/glanding on hfr/gs;
Posté le 13-12-2006 à 14:42:06  profilanswer
 

anapajari a écrit :

Et bin fallait pas faire de l'asynchrone [:spamafote]


gelko a écrit :

J'ai toruvé un moyen! Je passe en mode syncrone et ca marche!


[:hahaguy]
 

n°1490872
gelko
Posté le 13-12-2006 à 15:04:46  profilanswer
 

Mon pote, tout le monde n'a pas l'experience que t'as sur la techno... je decouvre, desolé de ne pas avoir la science infuse comme toi on dirait...

n°1861142
Slidejo
Posté le 13-03-2009 à 12:20:29  profilanswer
 

je remonte ce sujet, mais ayant cherché moi aussi, j'ai trouvé cette solution :
 
ton probleme : exploiter et afficher le resultat appelé par ta fonction AJAX dans différent endroit.
ta solution : "return maVariable;" pour utiliser le dit resultat.
 
ma solution :
document.getElementById(elementId).innerHTML = liste; // oui bon, là j'ai encore rien inventé...
mais en passant dans ta fonction appelante "elementID" pour exploiter le resultat où tu veux lorsque tu fais appel à la fonction.
 
exemple avec ta fonction :

Code :
  1. // inclusion de "elementId" dans les parametres de la fonction
  2. function ajax_select(req_select,elementId){
  3.    var liste = new Array();
  4.    if(_xmlHttp&&_xmlHttp.readyState!=0){
  5.       _xmlHttp.abort();
  6.    }
  7.    _xmlHttp=getXMLHTTP();
  8.    if(_xmlHttp){
  9.       _xmlHttp.open("GET",_adresseRecherche+"?requete="+req_select);
  10.       _xmlHttp.onreadystatechange=function() {
  11.       if(_xmlHttp.readyState==4 && _xmlHttp.responseXML) {
  12.          liste = traite_reponses(_xmlHttp);
  13.          document.getElementById(elementId).innerHTML = liste ;  // appel de elementId pour inserer où il faut ton resultat
  14.       }
  15.    }
  16.       _xmlHttp.send(null);
  17.    }
  18. }


 
l'appel à la fonction se fait où tu veux dans ta page !APRES CONSTRUCTION! de ton element HTML dont id=elementId

Code :
  1. <input type="text" id="monInput" onMouseUp="javascript:ajax_select('ta_requete', 'monInput'){">


 
je sais : c'est pas "très" W3C, mais tant que les navigateurs integrerons la methode "innerHTML", c'est quand même plus simple.
tu peux gerer le tout en asynchrone, et inserer le resultat où tu veux dans tes pages html.
 
inconvénient : si tu veux retourner le resultat dans un script...
mais peut-etre peux-tu appeler une fonction js de mise en forme de "liste" en fonction d'un parametre passé à "ajax_select(req_select,elementId)" ?
-  :sleep:  
-oui bon...
ben ce qui fera quand même :

Code :
  1. function exploitation_1(liste){
  2.     ... exploitation... ;
  3.     document.getElementById(elementId).innerHTML = liste;
  4. }
  5. function exploitation_2(liste){
  6.     ... exploitation... ;
  7.     document.getElementById(elementId).innerHTML = liste;
  8. }
  9. function exploitation_3(liste){
  10.     ... exploitation... ;
  11.     document.getElementById(elementId).innerHTML = liste;
  12. }
  13. function ajax_select(req_select,elementId,typeMiseEnForme){
  14.     ...;
  15.     liste = "...";
  16.     if(exploitation_1) exploitation_1(liste);
  17.     ...;
  18. }


appelé par "ajax_select("ta_Requete","Id_de ton_element, "exploitation_1" );"
 
voili, voilou...


Message édité par Slidejo le 13-03-2009 à 12:23:29

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

  [AJAX]Return dans un onreadystatechange

 

Sujets relatifs
Erreur AJAX, besoin de vous pour tester !Raffraichir 2 calques en Ajax ?
[RESOLU] [AJAX] probleme d'envoi d'un "+" par POSTPetit topo sur les Frameworks AJAX
g++ et return mis automatiquementPq nous découvrons AJAX que maintenant ?
Pb Ajax/JavascriptAjax : difficultés sur le mode asynchrone
Dev C++ : 'main' must return 'int'AJAX - Taille maximale de retour
Plus de sujets relatifs à : [AJAX]Return dans un onreadystatechange


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