【发布时间】:2017-02-09 15:43:24
【问题描述】:
我正在使用 $.ajax 从服务器(地理服务器)检索一系列数据。
(简化的)请求如下所示:
var dataList=[];
//var urllist= // a list of several URLs to request data from
$.each(urllist,function(i) {
$.ajax({
jsonpCallback: 'getJson',
type: 'GET',
url: urllist[i],
dataType: 'jsonp',
success: function(data) {
dataList[i]=data.value;
}
})
});
我需要写入全局变量dataList,因为我需要在来自 urllist 的 所有 请求完成后触发一个事件。 (我已经实现了类似so 的延迟)。
问题在于完成的列表总是以不同的顺序排列。我需要结果与请求的顺序相同。
这可能是一个关闭问题,其中索引i 被传递给ajax 函数,而dataList 的分配在稍后发生(当每个循环继续进行时)。
我尝试像this 那样处理它,但问题仍然存在。同样$.each 就像上面的代码一样应该为每次迭代创建一个单独的闭包。
我已经成功实现了 recursive function,但它是同步的。
编辑:suggested duplicate 不处理循环的 ajax 请求
【问题讨论】:
-
“这可能是关闭索引的问题...” 不“我已经实现了类似的延迟” 嗯.. . 不,你不知道吗?你错过了 $.when 和回报。和延迟数组。
-
我添加了一个带有建议的答案,但现在我仔细阅读,您想在所有请求完成且不正确时触发一个事件,因此我删除了。
-
@KevinB :“(简化的)请求如下所示:”。我故意省略了部分代码以保持帖子简短。检查我提供的链接。
-
没有。你的问题需要有一个 mcve
标签: javascript jquery ajax geoserver