我正在尝试将数据从 JQuery Ajax 发送到通用处理程序,该处理程序计算某些内容并返回结果。 Ajax 请求是在 JQuery 端的 for
循环内发出的。代码看起来像这样:
function send(Handler, ids) {
var URL = "http://" + window.location.host + "/Handlers/" + Handler + ".ashx";
var i;
for (i = 0; i < 10; i++) {
var cur = $('.' + ids[i]);
$.ajax({
url: URL,
type: "POST",
data: JSON.stringify({
Data: cur
}),
dataType: "json",
cache: false,
beforeSend: //my before send code,
success: //my success code,
error: //my error code
});
}
alert('Done!');
}
我在 Visual Studio 2012 中的以下行放置了 3 个断点:
$.ajax({
这个
alert('Done!');
第三个断点位于通用处理程序的第一行。
现在,当我尝试执行此代码时,Ajax 以异步方式运行良好。但是,当它到达第一个断点时,停止在那里,然后我恢复它,而不是到达通用处理程序的断点,它继续循环并返回到第一个断点。然后,在到达第二个断点后,它会针对每个值一次又一次地停止在通用处理程序的断点处。
那么,这是否意味着 Ajax 首先收集所有 ajax 请求,然后在 for
循环之后一起执行它们?
最佳答案
Javascript 是单线程且非阻塞的。这意味着在第一次迭代中不会等待 ajax 调用完成,它将返回并开始第二次迭代,依此类推。 所以,不,它不会一起执行它们。它肯定会按照循环的顺序启动 ajax 调用,但无法知道什么会先结束。它可能会进行所有 ajax 调用,然后得到答案(并不意味着它是第一次迭代的答案),或者在循环中间它可能会得到答案。
关于javascript - JQuery Ajax 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30649614/