0

XDomainRequestオブジェクトを使用して2つのdivにAJAX応答から返されたhtmlを入力しているaspxページがあります。
Jqueryを使用してdivを取得し、取得したリストで「each()」を実行しました

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

さて、何が起こっているのか、私は異なるIDを持つ2つのDivをページに持っており、このコードが「$ .ready(function(){})」で実行されると、両方のリクエストが非同期でサーバーに送信され、処理されます

結果は
1です。onloadが両方のdiv結果の2番目のdivの応答を取得する場合があります。
2. IEはサーバーに1つのリクエストのみを送信します(サーバーに送信されるリクエストを確認するためにフィドラーを使用しています)。

誰かが私にコードの何が問題なのかを教えてもらえますか?私の知る限り、XDRは同期呼び出しをサポートしておらず、非同期呼び出しは間違った結果をもたらします。この問題の回避策/ヒント。

4

1 に答える 1

3

コードの間違いを指摘したときに自分で解決した問題:(。

xdr = new XDomainRequest(); 

する必要があります

var xdr = new XDomainRequest(); 

ポイント2では、応答に「Cache-Control:no-cache」ヘッダーを追加しましたが、問題は解決しました。

于 2010-08-11T08:06:42.093 に答える