我在优化此功能时遇到问题,该功能从多个页面上的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");
});
答案 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 APIvar 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);