在循环和对象数组时,我在发送 AJAX 调用之后遇到问题。代码如下
var def = true;
$.each(urls, function(index, val) {
var postResult = $.Deferred();
link = 'http://myurl.com' + val.aslug + '/' + val.slug;
$.when(def).then(function(){
$.post('https://graph.facebook.com ', {id : link, scrape : 'true' }, function(data, textStatus, xhr) {
}).always(function(){
postResult.resolve(5);
});
});
def = postResult;
});
问题是第一次和第二次通话都正常。但是第三次调用和以下与第二次调用相同:/我认为每个都不会更改为下一个对象
最佳答案
在这种情况下,最简单的方法是: 将变量链接赋值移到“when-then”结构内部。
var def = true;
$.each(urls, function(index, val) {
var postResult = $.Deferred();
$.when(def).then(function(){
var link = 'http://myurl.com' + val.aslug + '/' + val.slug;
$.post('https://graph.facebook.com ', {id : link, scrape : 'true' }, function(data, textStatus, xhr) {
}).always(function(){
postResult.resolve(5);
});
});
def = postResult;
});
你遇到这个问题是因为 JS 的异步能力。 $.each() - 循环根本不等待“延迟的代码段”运行。它循环遍历您的数组并创建一个将执行的任务队列。
您也可以考虑使用 $.AJAX
和选项 async:False
来代替
关于javascript - 使用 jQuery 发送一个又一个 AJAX 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27951005/