Ajax循环和响应顺序

时间:2017-02-09 15:43:24

标签: javascript jquery ajax geoserver

我正在使用$ .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请求

2 个答案:

答案 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的形式请求数据解决了问题

charlietfl

上获得@ Looped ajax request. Error handling and return order的答案

对于任何查找此内容的人:您很可能必须启用Cross-Origin Resource Sharing on geoserver才能直接访问JSON