我需要为循环ajax调用的数据分配id

时间:2017-06-15 21:13:01

标签: jquery arrays ajax function

我正在使用2个端点:

  1. 位置ID列表
  2. 位置特定信息(此端点需要来自最后的第一个ID)
  3. 第二个端点不包含位置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和url的对象(最后的id)推送到" en"。我使用" en"来激活makeMerge函数。和" d2"作为参数。

    在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调用。

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

    我想将id分配给由相应url检索的数据,从逻辑上讲,这样的接缝应该在LocationData函数中完成,这样当ajax调用被激活时,当前正在使用的id被分配,然后继续到下一个。我认为这是确保订单不被搞砸的最佳方法(错误的ID分配给数据)。

    有人能想到解决方案吗?

1 个答案:

答案 0 :(得分:0)

我在我的参数for循环中使用for循环,循环遍历id并在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);

        };