2017-06-15 75 views
0

我与2个端点工作分配ID数据:我需要从循环Ajax调用

  1. 位置ID列表
  2. 特定位置的信息(此端点都需要从第一时间的一个id结束)

第二个端点不包含位置ID,但我需要它们成为位置信息的一部分。我想以某种方式将ID注入位置信息,但我卡住了。

我做一个调用来检索位置标识:

ar settings1 = { 
    "async": true, 
    "crossDomain": true, 
    "url": "wss_api/wss_api.php?method=hello&format=json", 
    "dataType": "json", 
    "method": "GET" 
}; 

var a1 = $.ajax(settings1); 

var en = []; 

var rt = []; 

$.when(a1).done(function(d1) { 

    var d1p = JSON.parse(d1.data); 

    $.each(d1p.Entities, function(i, id) { 

     en.push({entity:id, url:"http://localhost/api_test/wss_api/locationdata.php?method=hello&format=json&entity=" + id}); 

    }); 

    makeMerge(en, d1p); 

}); 

这里我把包含ID和网址。(该ID在年底)为“en”的对象。我用“en”和“d2”作为参数来激发makeMerge函数。

在makeMerge函数中,我有一个函数用于ajax调用,并执行forloop以将url和id函数推送到“rt”。

function makeMerge(en_urls, en_id) { 

    function LocationData(d2, d3) { 

     return $.ajax({ 
      "async": true, 
      "crossDomain": true, 
      "dataType": "json", 
      "url": d2, 
      "method": "GET" 
     }); 
    } 

    for (url in en_urls) { 
     rt.push(LocationData(en_urls[url].url, en_urls[url].entity)); 
    } 

    $.when.apply(this, rt).done(function() { 

     var ld = []; 

     for (var i = 0; i < arguments.length; i++) { 

     }); 

    }); 

然后我执行ajax调用。

问题是,ids从第一个ajax调用(d1p.Entities)到包含id和url(en)的对象到makeMerge函数的forloop(en_urls [url] .entity)到一个参数LocationData函数(d3)并停止。

我想将ID分配给其相应的URL检索到的数据,并且在逻辑上它应该在LocationData函数中完成,以便在启动ajax调用时,会在移动之前分配当前正在使用的ID到下一个。我认为这是确保订单不被搞砸的最好方法(分配给数据的错误ID)。

任何人都可以想到一个解决方案吗?

回答

0

我在我的参数里面使用了一个循环for循环,通过id循环,并且如果它的索引与参数的索引匹配,则分配id。

$.when.apply(this, rt).done(function() { 

     var ld = []; 

     for (var i = 0; i < arguments.length; i++) { 

      datap = $.parseJSON(arguments[i][0].data);  

      for (url in en_urls) { 

       if (url == i) { 

        datap.Location["Entity"] = en_urls[url].entity; 

       } 

      }; 

      values = datap.Location; 

      ld.push(values); 

     };