我需要从api中检索数据,该数据对返回的结果数量有限制。
使用找到的结果总数,我可以进行额外的额外ajax调用,直到检索到所有数据。但是,我需要按字母顺序对所有数据进行排序,然后再将其显示在页面上。
在成功完成所有ajax调用后,如何访问数组中的数据?
这是我到目前为止所做的:
var mydata = [];
function loadPosts() {
var api = 'http://someurl.com';
$.ajax({
url: api,
dataType: 'jsonp',
data: {
rows: 1,
},
success: function(data) {
totalNumberOfRecords = data.numFound;
for (var start = 0; start < totalNumberOfRecords; start += rows) {
$.ajax({
url: api,
dataType: 'jsonp',
data: {
'rows': rows,
'start': start,
},
success: function(data) {
$.each(data.namesList, function(index, item) {
mydata.push(item.firstName);
});
},
});
}
},
});
}
console.log(mydata);
答案 0 :(得分:1)
老实说,如果我有这个API限制问题,我会经常使用服务器与API通信,以便将所有数据捕获到我自己的系统中 - 比如MySQL或Redis等等。然后我会使用我的前端JS,但我想要没有限制
答案 1 :(得分:1)
这是一种即食面条解决方案。
var numOfAjax = 0;
var numOfResolvedAjax = 0;
for (var start = 0; start < totalNumberOfRecords; start += rows) {
numOfAjax++;
$.ajax({
url: api,
dataType: 'jsonp',
data: {
'rows': rows,
'start': start,
},
success: function(data) {
$.each(data.namesList, function(index, item) {
mydata.push(item.firstName);
});
numOfResolvedAjax++;
// Check if all ajax request has been responded to sort the result.
if (numOfResolvedAjax === numOfAjax) {
sortMyData(myData);
}
},
});
}
要获得完美的解决方案,请在async库中查看可以帮助您的许多功能。例如:async.parallel可能就是您所需要的。