2010-08-09 3 views
0

J'ai une page aspx sur laquelle j'utilise l'objet XDomainRequest pour remplir deux div (s) avec html renvoyé par la réponse AJAX.
Je l'ai utilisé Jquery pour obtenir les divs et effectuer « each() » sur la liste récupéréeMise en cache d'objet XDomainRequest/problème d'appel asynchrone

var divs = $("div"); 
divs.each(function(index) { 
    if (window.XDomainRequest) { 
     xdr = new XDomainRequest(); 
     if (xdr) { 
      xdr.onload = function() { 
       alert("XDR Response - " + xdr.responseText); 
       var currentDivID = divs[index].attributes["id"].value; 
       var selectedDiv = $("div[id='" + currentDivID + "']"); 
       if (xdr.responseText == '') selectedDiv.attr("style", "display:none;"); 
       else selectedDiv.append(xdr.responseText); 
      }; 
      xdr.open("GET", xdrUrl); 
      try { 
       xdr.send(); 
      } catch (e) { 
       alert(e); 
      } 
     } else { 
      alert('Create XDR failed.'); 
     } 
    } else { 
     alert('XDR not found on window object .'); 
    } 
} 

Maintenant, ce qui se produit est, j'ai deux Divs sur une page qui ont des ID différents et lorsque ce code fonctionne sur « .ready $ (function() {}) », les deux demandes sont envoyées de manière asynchrone au serveur et traitées

le résultat est
1. parfois onload obtenir la réponse pour la deuxième div dans les deux div résultats.
2. IE envoie une seule requête au serveur (j'utilise fiddler pour voir quelles requêtes sont envoyées au serveur). Est-ce que quelqu'un peut me guider ce qui est faux avec le code?

Autant que je sache XDR ne supporte pas les appels synchrones, et les appels asynchrones me donnent des résultats erronés. Toute solution de contournement/conseil pour ce problème. .

Répondre

3

Problème résolu par moi-même quand je l'ai fait une erreur dans mon code :(

xdr = new XDomainRequest(); 

devrait être

var xdr = new XDomainRequest(); 

point 2, j'ajouté « Cache-Control: no- cache " en-tête dans ma réponse et il a résolu le problème."

Questions connexes