Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在外部数组中存储ajax响应_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 在外部数组中存储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

我知道很多关于这个主题的话题已经存在(例如),但目前我处于信息过载的状态,似乎无法完成。许多主题都说使用同步请求,但由于这是不可取的(顺便说一下,我的浏览器不再支持),所以我必须避免这种情况

问题:

我有一张单子。我想将每个项目传递给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调用。谢谢。。。但引用我的问题:许多主题都说使用同步请求,但由于这是不可取的(顺便说一句,我的浏览器不再支持),所以我必须避免这种情况。所以这对我不起作用。