【发布时间】:2012-11-18 18:04:49
【问题描述】:
我在循环中有一个 jQuery POST 函数(多个 post 调用)。
出于某种原因,jQuery 正在发布,但在循环结束并立即解析所有结果之前不会返回所有数据。
FOREACH arg_value IN args
{
console.log('Do stuff');
$.post('https://blah.com/xml.php',
{arg: arg_value},
function(xml) {
$(xml).find('tag').each(function() {
console.log('Do more stuff');
});
});
}
这个的输出是……
做事
做事
做事
做更多的事情
做更多的事情
做更多的事情
似乎 jQuery 正在缓存结果或直到最后才执行它。
我期待...
做事
做更多的事情
做事
做更多的事情
做事
做更多的事情
有没有一个选项可以告诉 jQuery 暂停执行,直到 AJAX 有结果?它似乎像往常一样异步运行,但在这种情况下我不希望这样。
【问题讨论】:
-
我认为这里没有缓存任何内容。 AJAX 是一个异步调用,只有在调用完成并返回结果时才会执行更多操作。虽然您的 for each 是同步的并且线性执行(在循环中)
-
不会那样运行...当 AJAXsuccess 返回时,这里会执行其他代码...它的异步调用...
-
这符合预期。如果您希望您的 ajax 调用以串行方式触发,请查看 deferreds 以对其进行排序。
-
天哪,这很有道理。
-
使用 $.ajax 和完成/成功/错误回调。
标签: javascript jquery ajax loops xml-parsing