Javascript 通过x个调用量获取所有JSON条目
我正在访问一个json文件,该文件在x个页面上,每页有50个条目。 我有总数的条目,比如说500条,总共有10页 我从第1页的json文件中获取数据,将数据传递到数组,然后重复该函数,但这次是第2页 我已经创建了这个函数,它完美地循环递增和获取每个页面,但它不会等待json数据被解析并传递到数组,然后再次循环 基本上,我想等到数据处理完毕后再继续 到目前为止,我的代码大致如下:Javascript 通过x个调用量获取所有JSON条目,javascript,jquery,json,pagination,loops,Javascript,Jquery,Json,Pagination,Loops,我正在访问一个json文件,该文件在x个页面上,每页有50个条目。 我有总数的条目,比如说500条,总共有10页 我从第1页的json文件中获取数据,将数据传递到数组,然后重复该函数,但这次是第2页 我已经创建了这个函数,它完美地循环递增和获取每个页面,但它不会等待json数据被解析并传递到数组,然后再次循环 基本上,我想等到数据处理完毕后再继续 到目前为止,我的代码大致如下: function getJsonData(metroID){ currentPageNo = 0;
function getJsonData(metroID){
currentPageNo = 0;
totalPages = 'x';
count = 0;
function jsonLoop(){
meroAreaSearchString = 'http://jsonurl'+currentPageNo;
$.getJSON(meroAreaSearchString,{},function( data ){
if(totalPages == 'x'){
var totalEntries = data.resultsPage.totalEntries;
var perPage = data.resultsPage.perPage;
totalPages = (totalEntries/perPage);
log(totalEntries+', '+perPage+', '+totalPages);
log(Math.round(totalPages));
}
$.each(data.resultsPage.results.event, function(i,item){
var name = item.displayName;
var type = item.type;
var valueToPush = new Array();
valueToPush[0] = name;
valueToPush[1] = type;
valueToPush[3] = count;
locations.push(valueToPush);
count++;
});
});
if(currentPageNo == totalPages){
log(locations);
alert('finished processing all results');
}else{
currentPageNo++;
jsonLoop();
}
currentPageNo++;
jsonLoop();
}
}
你试过让请求同步吗? 只需将这段代码放在函数getJsonData的顶部
$.ajaxSetup({async:false});
您可以将async选项指定为false以获取同步Ajax请求。这将停止函数,直到回调设置了一些数据。函数发出AJAX请求,并在AJAX调用成功解析时调用其回调函数(如果有意义的话)
基本上,这只意味着给定一个调用$.getJSON(url、数据、回调)
,jQuery将向url
发送一个AJAX请求,同时传递数据
,并在调用解析时调用回调
。直截了当
这里缺少的是AJAX调用,正如其名称所示,它是异步的。这意味着在AJAX调用的整个生命周期中,它让应用程序中的其他逻辑运行,而不是等待它完成
比如说:
$.getJSON(url, data, callback);
alert('foo');
。。。很可能会导致在AJAX调用完成之前发生alert()
调用。我希望这是有道理的
为了确保在AJAX调用完成后发生一些事情,您将该逻辑放入回调中。这就是回调的真正目的
$.getJSON(url, data, function (d) {
something_you_want_done_after_ajax_call();
});
在问题的上下文中,您只需将所有对
jsonLoop()
的有条件调用放入回调中。由于缩进的原因,现在不太明显,但它当前在回调之外。您多次请求相同的数据?为什么不请求一次呢?只需将async
设置为false?不过,这似乎是一种获取数据的糟糕方式。jbabey,你会怎么做?正如我在上面所说的,我对编码还很陌生,所以我希望看到一种更有效的方法!对于那些真正应该是异步的AJAX调用,请确保将其设置回async:true
。这方面的一个失误可能会破坏相当多的用户体验:谢谢你的详细回复Richard!