jQuery中的多个AJAX请求从多个页面获取相同类型的信息

时间:2018-05-04 12:54:05

标签: jquery ajax

我在优化此功能时遇到问题,该功能从多个页面上的API收集JSON数据。没有机会获得该API的所有列表。所以我需要向每个页面发送请求(它可以从0到∞),当我得到响应时 - 只需将所有内容放在一个对象中。这个功能有效,但我需要优化它以通过每个页面并提出请求,直到我收到信息。感谢您的帮助:)

$.getJSON('link.json&page=1', function(data) {

  $.getJSON('link.json&page=2', function(data2) {

    $.getJSON('link.json&page=3', function(data3) {

     var newObj = data.events.concat(data2.events).concat(data3.events);
     jsondata.render(newObj);      

    }).fail(function(jqXHR) {
        var newObj = data.events.concat(data2.events);
        jsondata.render(newObj);        

        //alert("3 page Not Found");
    });    


  }).fail(function(jqXHR) {
      jsondata.render(data.events);

      //alert("2 page Not Found");
  });    

}).fail(function(jqXHR) {
  //alert("1 page Not Found");
});

2 个答案:

答案 0 :(得分:1)

绝对不是最好的解决方案,但我想在这里举一个例子,它可能会帮助你进一步:

var allData = []; // In here we are storing data

function getJSON(page) {
    $.getJSON('link.json&page=' + page, function(data) {
        if (data.events.length > 0) { // Not an empty array
            allData.push(data);       // Push received data to array
            getJSON(++page);          // Recursive          
        } else {
            console.log('Ok, we are done here');
        }
    });
}

getJSON(1);

使用此递归函数,只要服务器的响应为正,您就可以自行调用。在每次成功请求之后,至少在这种情况下,您将响应存储到数组中(但可以更改为其他内容)。

然而,这里可能会遇到一些问题。例如,它在3秒后执行某些操作,但您无法确定它是否足以从服务器检索所有信息。

答案 1 :(得分:1)

让自己有所作为。使用jQuery http://apidoc.ticketco.no/#!/events/findEvents

时,它适用于TicketCo API
var allData = []; // In here we are storing data

function getJSON(page) {
    $.getJSON('urll.json&page=' + page, function(data) {
        if (data.events.length > 0) {   // Not an empty array             
            allData.push(data.events);  // Push received data to array
            getJSON(++page);            // Recursive          
        } else {
            var flatArray = [].concat.apply([], allData); // Flatten list of all arrangements
            console.log(flatArray); // Flat results

            // Do stuff ...
        }
    });
}

getJSON(1);