2

クロスドメインコールを行っています。これにはさらに時間がかかります (数ミリ秒または 1 秒)。

その下でコードが実行されています。

var xdr;
    if (window.XDomainRequest) // Check whether the browser supports XDR. 
    {
        xdr = new XDomainRequest(); // Create a new XDR object.
        if (xdr) {
            xdr.onload = function () {
                var data = $.parseJSON(xdr.responseText);
                AddData(data, link);
            };
            xdr.open("post", urlSearch);
            xdr.send();
        }
        else {
            alert('Server Error!! Try Later.');
        }
    }
    else {
         alert("Not IE 8");
     }

私はその同期をしたい。その呼び出しが終了した後、以下のコードが実行されます

助けてください

前もって感謝します。

4

1 に答える 1

4

明確にするために、一部の「JavaScript」プログラマーは実際には jQuery プログラマーである傾向があるためです (そして、彼らがそうであるとは思えません。私はコメントについて話しているのです)。

本題に戻ります。数分のグーグル検索の後、XDomainRequest オブジェクトは同期呼び出しをサポートしていないようです。

そして、これは実際に良いです。あなたが知らないのは、同期 AJAX (同期 AJAX はそれ自体で矛盾していることに注意してください。最初の A は Asynchronous を表します) は、ブラウザーにおけるすべての悪の根源です。なんで?JavaScript はシングルスレッドであるため、リクエストが完了するのを待っているユーザーは何もできません。ページ全体がブロックされます (IE8 のように、ブラウザー全体がブロックされると思われる最悪のケースもあります)。

それで、あなたは何をすべきですか?すべての優れた JavaScript プログラマーが行うように、コードを非同期で記述する必要があります。例えば:

var xdr;
if (window.XDomainRequest) { // Check whether the browser supports XDR. 
    xdr = new XDomainRequest(); // Create a new XDR object.
    xdr.onload = function () {
        var data = $.parseJSON(xdr.responseText);
        AddData(data, link);
        // other code goes here
    };
    xdr.onerror = function () {
        alert('Server Error!! Try Later.');
    };
    xdr.open("post", urlSearch);
    xdr.send();
} else {
    alert("Not IE 8");
}

に依存するコードがさらにある場合はxdr、それをonloadhandler に追加するだけです (別の関数でラップして、読みやすくすることができます)。

于 2012-11-21T16:17:59.983 に答える