2010-08-09 2 views
0

У меня есть страница aspx, на которой я использую объект XDomainRequest для заполнения двух div (ов) с помощью html, возвращаемого из ответа AJAX.
я использовал Jquery, чтобы получить дивы и выполнить «каждый()» на извлеченном СписокXDomainRequest object caching/асинхронный вызов

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 .'); 
    } 
} 

Теперь, Что происходит, у меня есть две дивы на странице, которые имеют разные идентификаторы и при выполнении этого кода на «$ .ready (функция() {})», обе запросы асинхронно отправляются на сервер и обрабатываются

результат
1. иногда OnLoad получить ответ на второй DIV в обоих результатов DIV.
2. IE передает только один запрос на сервер (я использую скрипач, чтобы видеть, какие запросы отправляются на сервер).

Может ли кто-нибудь объяснить мне, что не так с кодом? Насколько я знаю, XDR не поддерживает синхронные вызовы, а асинхронные вызовы дают мне неправильные результаты. Любой метод обхода проблемы. .

ответ

3

Проблема решена мною, когда я указал на ошибку в моем коде :(

xdr = new XDomainRequest(); 

должен быть

var xdr = new XDomainRequest(); 

Для точки 2, я добавил «Cache-Control: no- кеш " заголовок в моем ответе, и он решил вопрос.