2010-02-21 7 views
1

est sous le code JavaScript que j'utilise dans ma page HTMLcomment rendre les fonctions de javascript ensemble?

<script type="text/javascript"> 
function loadXMLDoc(HTTP) 
{ 
    var xmlHttp; 
    try { 
     xmlHttp=new XMLHttpRequest(); 
    } catch (e) { 
     try {  
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); 
     } catch (e) { 
      try {  
       xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); 
      } catch (e) {  
       alert("Your browser does not support AJAX!");  
       return false; 
      }  
     } 
    } 

    xmlHttp.onreadystatechange=function() { 
     if (xmlHttp.readyState==4) { 
      alert(xmlHttp.responseText); 
     } 
    } 

    var params ="dd=123"; 
    xmlHttp.open("POST",HTTP,true); 
    xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    xmlHttp.setRequestHeader("Content-length", params.length); 
    xmlHttp.setRequestHeader("Connection", "close"); 
    xmlHttp.send(params); 
} 
</script> 

dans le ci-dessous javascript i baguette pour activer chaque fonction ajax

<script type="text/javascript"> 

// here i wand to send function together 
return (loadXMLDoc('Page1.asp') && loadXMLDoc('Page2.asp') && loadXMLDoc('Page3.asp')); 
</script> 

Mais ici le problème est que je ne comprends pas " retour »(2ème signifie & 3ème fonction fonctionne pas)

Seule la première fonction est

Espérant votre réponse

Répondre

1

Votre fonction loadXMLDoc() ne renvoie rien, ajoute "return true" à la fin de cette fonction. Notez qu'un vrai retour de loadXMLDoc() signifie que vous avez démarré avec succès une requête AJAX. Il se terminera dans le futur, ce qui entraînera l'appel de onreadystatechange. Ainsi, vous lancez plusieurs requêtes AJAX en parallèle.

Si vous vouliez plusieurs appels AJAX dans l'ordre, essayer quelque chose comme ce qui suit:

function doAjaxRequest(url, onreadystatechange) 
{ 
    var xmlHttp; 
    try { 
     xmlHttp=new XMLHttpRequest(); 
    } catch (e) { 
     try {  
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); 
     } catch (e) { 
      try {  
       xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); 
      } catch (e) {  
       alert("Your browser does not support AJAX!");  
       return false; 
      }  
     } 
    } 

    xmlHttp.onreadystatechange = onreadystatechange; 

    var params = "dd=123"; 
    xmlHttp.open("POST", url, true); 
    xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    xmlHttp.setRequestHeader("Content-length", params.length); 
    xmlHttp.setRequestHeader("Connection", "close"); 
    xmlHttp.send(params); 
} 

function loadXMLDocs(HTTP) 
{ 
    var loadNextFile = function() { 
     if (HTTP.length != 0) { 
      var url = HTTP.unshift(); 
      doAjaxRequest(url, onreadystatechange); 
     } 
    } 

    var onreadystatechange = function() { 
     if (this.readyState==4) { 
      alert(xmlHttp.responseText); 

      loadNextFile(); 
     } 
    } 

    loadNextFile(); 
} 

loadXMLDocs(['Page1.asp', 'Page2.asp', 'Page3.asp']); 
+0

si j'ajoute return dans le if (xmlHttp.readyState == 4) { alert (xmlHttp.responseText); renvoyer true; } la fonction fonctionne pas ensemble – Alex

+0

et aussi je n'obtenir le retour du vrai ajax – Alex

+0

j'obtiens l'erreur « xmlHttp.readyState est null » – Alex

0

Wow parler de l'enfer indentation. cela devrait fonctionner mieux;

<script type="text/javascript"> 
function loadXMLDoc(HTTP){ 
var xmlHttp; 
try{ 
    xmlHttp=new XMLHttpRequest(); } 
    catch (e){ 
     try{  
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); 
     }catch (e){ 
      try{  
       xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); 
      }catch (e){  
       alert("Your browser does not support AJAX!");  
       return false; 
      } 
     } 
    } 
    xmlHttp.onreadystatechange=function(){ 
     if(xmlHttp.readyState==4){ 
      alert(xmlHttp.responseText); 
     } 
    } 
    var params ="dd=123"; 
    xmlHttp.open("POST",HTTP,true); 
    xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    xmlHttp.setRequestHeader("Content-length", params.length); 
    xmlHttp.setRequestHeader("Connection", "close"); 
    xmlHttp.send(params); 

    return true; 
} 
</script> 
+0

xmlHttp.send (params); return true; la fonction ajax freine ici, nous n'obtenons pas de réponse – Alex

1

Remeber dans la déclaration:

return (loadXMLDoc('Page1.asp') && loadXMLDoc('Page2.asp') && loadXMLDoc('Page3.asp')); 

se traduit logiquement:

if (loadXMLDoc('Page1.asp')){ 
    if (loadXMLDoc('Page2.asp')){ 
     if (loadXMLDoc('Page3.asp')){ 
      return true; 
     } 
    } 
} 
return false; 

Ainsi, ne seront appelés chacun des appels de fonction loadXMLDoc successives() lorsque si la précédente La fonction renvoie true.

+0

J'essaie comme ça .. mais seulement la première fonction fonctionne .. autre ne fonctionne pas – Alex

+0

@Alex: Ce qu'il veut dire, c'est que vous devez changer cette ligne de code en un ensemble séquentiel approprié des appels de fonction, tels que 'loadXMLDoc ('Page1.asp'), loadXMLDoc ('Page2.asp'), loadXMLDoc ('Page3.asp');'. Perdre aussi la partie 'return' de la déclaration, cela n'a aucun sens dans le contexte global. –

Questions connexes