一段時間後,這是我的代碼:瀏覽器停止工作在同步Ajax調用for循環
for (var i = 0; i < 2; i++) {
$.ajax({
type: "GET",
async: false,
url: "/MyController/MyMethod",
success: function (data) {
if (i == 0) {
$('#result_progress').hide();
$('#result_msg').hide();
$('#details').show();
} else if (i == 1) {
$.ajax({
type: "GET",
async: true,
url: "/Import/Finish",
success: function (data) {
....
});
}
if (i < 2) {
$('#details').html($('#details').html() + 'someText'));
}
}
});
}
在這個例子中迭代雖小,但我做了這裏的方法更簡單。我知道我可以使用開關,但那不是重點。實際上它有更多的循環。沒關係,這個錯誤也發生在這個代碼上。
下面是發生了什麼: 如果我把斷點放入第一個ajax調用的成功部分,並且在Chrome中調試時,eveything可以正常工作。 下面是我的意思是工作得很好:在方法進入第一次成功之後,我想隱藏一些div並顯示ajax調用的結果。第二次輸入第一個成功時,另一個字符串將被添加到前一個。 最後,當輸入第二個成功部分時,該消息將被隱藏,並顯示一些數據。
這就是發生了什麼事情: 一切都很好,直到MyMethod被調用。當它被調用時,瀏覽器停止工作。如果我按下鼠標左鍵,則什麼都不會發生。當最後一次調用MyMethod時,瀏覽器工作正常,我可以快速瀏覽消息,然後顯示第二個Ajax調用的數據。而且我很快看到的消息是從MyMethod的所有調用中發出的全部消息,這不應該發生。
我希望它能顯示整個for循環和Finish方法之前。它不應該是相同的信息。每次調用MyMethod的Ajax應該會變得更大。
您爲什麼首先使用同步呼叫? – Chad
你期望瀏覽器如何處理循環中的同步ajax調用?與alert相同,爲了繼續腳本執行,瀏覽器必須先等待ajax調用完成。 – Corneliu
@Chad因爲ajax調用處於for循環。 –