Javascript 在外部数组中存储ajax响应
我知道很多关于这个主题的话题已经存在(例如),但目前我处于信息过载的状态,似乎无法完成。许多主题都说使用同步请求,但由于这是不可取的(顺便说一下,我的浏览器不再支持),所以我必须避免这种情况 问题: 我有一张单子。我想将每个项目传递给ajax请求,以收集一些附加信息。结果应该是一个包含附加数据的新列表Javascript 在外部数组中存储ajax响应,javascript,jquery,ajax,Javascript,Jquery,Ajax,我知道很多关于这个主题的话题已经存在(例如),但目前我处于信息过载的状态,似乎无法完成。许多主题都说使用同步请求,但由于这是不可取的(顺便说一下,我的浏览器不再支持),所以我必须避免这种情况 问题: 我有一张单子。我想将每个项目传递给ajax请求,以收集一些附加信息。结果应该是一个包含附加数据的新列表 var list=['a','b','c','d']; var newlist=[]; for(element in list) { var item=list[element]; $.ajax
var list=['a','b','c','d'];
var newlist=[];
for(element in list)
{
var item=list[element];
$.ajax({
url: "process.php",
type:"get",
data:{content:item}
}).success(function(response)
{ newlist.push([item,response]);}
}};
}
我想现在我应该有一个这样的清单
newlist=[ ['a','response'],['b','response'],['c','response'],['d','response'] ];
(当然,“响应”是实际响应)。然而,情况并非如此。当我在success函数中放置一个警报以显示该项时,它会显示“d”四次
我做错了什么?将Ajax调用封装在函数中,并让它在递归中成功调用自己 如果成功,只需将结果从服务器推送到newList数组中即可
如果服务器的结果为空,则继续执行。使用默认值$尝试
async:false
。ajax方法为async:true和async:true回调函数之外的任何变量都不能更改
var list=['a','b','c','d'];
var newlist=[];
for(element in list)
{
var item=list[element];
$.ajax({
url: "process.php",
type:"get",
data:{content:item},
async: false
})
.success(function(response){
newlist.push([item,response]);
});
}
console.log(newlist);
实际上,您遇到了一个关闭问题(中有数百个帖子可以解决这个问题)。你可以检查这个以得到完整的解释(或者在互联网上找到一篇好文章) 本质上,问题源于这样一个事实:for的
是同步的,而ajax调用是异步的。这意味着for循环将在任何ajax调用完成之前完成。Ajax对item
和item
的回调将是d
(因此四个d
)
一个快速的解决方法是使用一个替代。为了证明这一点,可以使用另一个aynchronous函数而不是ajax调用来模拟您的问题:
var list=['a','b','c','d'];
var newlist=[];
//闭合问题
for(列表中的元素){
变量项=列表[元素];
setTimeout(()=>console.log(项),0);
}
//没有关闭问题
list.forEach((项)=>setTimeout(()=>console.log(项),0))代码>可能重复我知道,这就是为什么我在我的问题中提到这一点,但这显然对我不起作用。你必须将每个调用嵌套在其他成功方法中。我只需要做一个AJAX调用。谢谢。。。但引用我的问题:许多主题都说使用同步请求,但由于这是不可取的(顺便说一句,我的浏览器不再支持),所以我必须避免这种情况。所以这对我不起作用。