我正在访问一个json文件,该文件在x页面数量上每页有50个条目。 我有条目总数,比如500 - 相当于10页。
我从第1页的json文件中获取数据,将数据传递给数组,然后重复该函数,但这次是第2页。
我创建了这个函数,它循环完美地递增并获取每个页面,但它不会等待json数据被解析并在再次循环之前传递给数组。
基本上我想等到数据处理完毕然后再继续。
到目前为止我的代码大致是这样的:
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();
}
}
答案 0 :(得分:0)
您是否尝试过同步请求? 只需将这段代码放在函数getJsonData
的顶部即可$.ajaxSetup({async:false});
您可以将async选项指定为false以获取同步Ajax请求。这将停止您的功能,直到回调设置一些数据。
答案 1 :(得分:0)
$.getJSON()
函数触发AJAX请求,并在AJAX调用成功解析时调用它的回调函数,如果这有意义的话。
基本上,这只是意味着给定一个调用$.getJSON(url,data,callback);
,jQuery会向url
发送一个AJAX请求,同时传递data
,并在调用时调用callback
解析。明确切割直截了当。
你在这里缺少的是AJAX调用正如其名称所暗示的那样,它的异步。这意味着在AJAX调用的整个生命周期中,它允许应用程序中的其他逻辑运行,而不是等待它完成。
这样的事情:
$.getJSON(url, data, callback);
alert('foo');
...很可能会在您的AJAX调用完成之前导致alert()
调用。我希望这是有道理的。
为确保在 AJAX调用完成后发生某些事情,您将该逻辑放在回调中。这就是回调的真正含义。
$.getJSON(url, data, function (d) {
something_you_want_done_after_ajax_call();
});
在您遇到问题的情况下,您只需将jsonLoop()
的所有条件调用放入回调中。由于你的缩进,现在不是很明显,但它目前在你的回调之外。