依次使用REST API调用jQuery ajax

时间:2016-08-04 08:55:02

标签: jquery ajax multithreading rest

我想问你一点帮助。我的问题很难,但我希望你能帮助我:) 我有一个REST API集合。 URL1提供名称列表。 URL2包含URL1名称的属性。 (例如URL2?name = URL1.name)。

网址1 - >亚当,朱丽叶,乔治

URL2?name = Adam - > ID,Property1等 (结果是JSON)

我为解决方案制作了这段代码:

    $(document).ready(function() {
    var $data_v = $('#content');

    var name = []; //store the name list

    $.ajax({
        type:'GET',
        url: "URL1",
        success: function(data){
            $.each(data, function(i, data){
              name[i] = data;
              console.log("Array: "+name[i]);
            });
        }
    }).done(function(){
            console.log("Succesful Array upload. The array size: "+name.length);
            for (var item_i=0; item_i<10; item_i++) { //name.length

                (function(item_i) { // protects i in an immediately called function 
                     $.getJSON( "URL2/?"+name[item_i]+"&any_other_property", function( data_items ) {
                       var items = [];
                       console.log("ID"+data_items[0]);
                       console.log("Property 1"+data_items[1]);
                    });

                })(item_i);                 
            }           
    });

console.log("Outside The array size: "+name.length);

});

问题1:REST服务器有一个请求最大值,所以如果我运行此代码它不显示所有属性,因为它停止并且我得到503错误。我尝试了setTimeout和.delay(),但是如果我运行这段代码它并不关心它们。

问题2:我尝试调用前10个属性,但返回值不按顺序排列(例如ID:1,0,4,6,2,3 ......)。

所有要点对我来说都很重要,因为我想将这些数据上传到数据库。

您有什么想法或经验,我该如何解决这个问题? 我会非常感谢任何想法。 提前谢谢。

PS:网址很抱歉,但我无法发布。

2 个答案:

答案 0 :(得分:0)

试试这个递归函数:

var item_i = 0;
function recursiv(item_i) {
 $.getJSON( "URL2/?"+name[item_i]+"&any_other_property", function( data_items ) {
                       var items = [];
                       console.log("ID"+data_items[0]);
                       console.log("Property 1"+data_items[1]);
                       item_i++;
                       if(item_i <10) {
                            recursiv(item_i);
                       }

                    });
};

答案 1 :(得分:0)

感谢您的想法和帮助。 我的解决方案是这个小代码:

jQuery.ajaxSetup({async:false});

请求非常慢,但不会给出503错误。