2
function method1() {
    method2();
    var x = 1;
}

function method2() {
    $.ajax({
        type: "GET",
        async: true,
        url: "/MyController/MyMethod",
        success: function (data) {
            var y = 6;
        }
    });
}

y の初期化と x の初期化のどちらが先に発生しますか? ajax 呼び出しがsyncの代わりにあった場合、これら 2 行の順序はどれになりますasyncか?

method1 は、ページの読み込み時に呼び出されます。

4

2 に答える 2

2

同期で、GET が成功した場合、Y が最初に初期化されます。非同期の場合はどちらでもかまいませんが、Web メソッドが返される前に処理が続行されると思われるという理由だけで、X に投資します。そうは言っても、Xが最初に解雇されるという保証はありません。

于 2012-10-17T12:27:30.023 に答える
1

xが最初に初期化されます(次の行を実行できるようになる前にHTTP応答が返される場合を除きますが、これは非常にまれです)。$ .ajaxは非同期であり、応答が返されるまでに時間がかかります。

yが最初に初期化されることを保証したい場合は、代わりにこれを行います。

function method1() {
    method2(function()
    {
        var x = 1;
    });
}

function method2(callback) {
    $.ajax({
        type: "GET",
        async: true,
        url: "/MyController/MyMethod",
        success: function (data) {
            var y = 6;
            callback();
        }
    });
}
于 2012-10-17T12:30:08.150 に答える