2010-02-20 3 views
2

J'utilise AHAH (comme indiqué ici http://microformats.org/wiki/rest/ahah) pour faire deux appels pour remplir HTML sur une page. Les appels arrivent après que le document est prêt et sont déclenchés l'un après l'autre. Le résultat, à chaque fois, est le premier appel est écrasé avec la réponse des derniers appels. Donc, je vais avoir deux des mêmes morceaux de HTML sur la page au lieu de deux morceaux de code uniques. Parfois, le premier appel ne parvient même pas à évaluer son rappel et reste donc vide.Les appels asynchrones Javascript marchent les uns sur les autres

Des idées?

Répondre

2

Si vous utilisez le code exact sur cette page, ce n'est pas surprenant, car l'exemple utilise une seule variable globale pour stocker le XMLHttpRequest. Il n'y a donc aucun moyen de le faire pour plusieurs requêtes simultanées: l'appel de la fonction une seconde fois écrase le req avec un nouveau, ce qui fait que la req lue par ahahDone est la mauvaise requête.

Si vous souhaitez autoriser cela, vous devrez faire req une variable locale (en le déclarant var en function ahah()), et le transmettre avec le target à la fonction ahahDone(). Ou tout simplement le faire en ligne:

function Element_loadHTML(element, url) { 
    var req= null; 
    if (window.XMLHttpRequest) { 
     req= new XMLHttpRequest(); 
    } else if (window.ActiveXObject) { 
     try { 
      req= new ActiveXObject('MSXML2.XMLHttpRequest'); 
     } catch() {} 
    } 
    if (!req) { 
     element.innerHTML= 'Browser does not support XMLHttpRequest'; 
     return; 
    } 
    element.innerHTML= 'Loading...'; 

    req.onreadystatechange= function() { 
     if (req.readyState===4) 
      element.innerHTML= req.status===200? req.responseText : 'Error '+req.status; 
    }; 
    req.open('GET', url); 
    req.send(null); 
} 

Element_loadHTML(document.getElementById('appdata'), 'appdata.part.html'); 
Element_loadHTML(document.getElementById('foo'), 'bar.part.html'); 

Les trucs avec le navigateur renifler et d'essayer d'exécuter des balises de script est sans espoir et brisé; ne l'utilisez pas. Il n'est pas recommandé de charger le contenu de l'élément <script> dans la page.

+0

PREFECT, je ne sais pas pourquoi je n'ai pas vu ça avant. Je vous remercie! En outre, je n'utilise pas la partie d'exécution de balise de script. C'est vraiment une mauvaise idée. – Matt

Questions connexes