我正在使用$ .ajax从服务器(geoserver)检索一系列数据。
(简化)请求如下所示:
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这样的推迟)。
问题是已完成的列表总是以不同的顺序排列。我需要结果与请求的顺序相同。
这可能是一个闭包问题,其中传递给ajax函数的索引i
和稍后发生的dataList
分配(当每个循环移动时) )。
我尝试像this一样照顾它,但问题仍然存在。同样,上面代码中的$.each
也应该为每次迭代创建一个单独的闭包。
我设法实现recursive function,但同步。
编辑:suggested duplicate不处理循环的ajax请求
答案 0 :(得分:1)
您可以按正确的顺序访问Floor(child.m_11 / child.m_12)
回调中的所有结果
$.when
答案 1 :(得分:1)
问题与延迟无关,而与请求所需的jsonp或相关fun removeVarDuplicates [] = []
| removeVarDuplicates ((v, e)::xs) = (v, e)::removeVarDuplicates(List.filter (fn (y, ys) => y <> v) xs);
无关。以json的形式请求数据解决了问题
对于任何查找此内容的人:您很可能必须启用Cross-Origin Resource Sharing on geoserver才能直接访问JSON