Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过x个调用量获取所有JSON条目_Javascript_Jquery_Json_Pagination_Loops - Fatal编程技术网

Javascript 通过x个调用量获取所有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;

我正在访问一个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();
        }
 }

你试过让请求同步吗? 只需将这段代码放在函数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!