一段时间后,这是我的代码:浏览器停止工作在同步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循环。 –