Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 如何仅在所有getjson调用完成时将对象数组传递给另一个函数?_Javascript_Arrays_Ajax_Getjson - Fatal编程技术网

Javascript 如何仅在所有getjson调用完成时将对象数组传递给另一个函数?

Javascript 如何仅在所有getjson调用完成时将对象数组传递给另一个函数?,javascript,arrays,ajax,getjson,Javascript,Arrays,Ajax,Getjson,我必须进行一些getjson调用,从google电子表格中获取一些数据,并将所需数据存储到一个数组中,过滤数组并显示数据。我当前的代码在第一个getjson完成之前有一段时间会传递数组中的大量数据,因此数组中的数据不完整 在将数组传递给另一个函数之前,是否有一种方法可以让我的上一个getjson仅在所有之前的getjson调用完成(包括它本身)时才将数组发送给另一个函数 <script> var files = new Array();

我必须进行一些getjson调用,从google电子表格中获取一些数据,并将所需数据存储到一个数组中,过滤数组并显示数据。我当前的代码在第一个getjson完成之前有一段时间会传递数组中的大量数据,因此数组中的数据不完整

在将数组传递给另一个函数之前,是否有一种方法可以让我的上一个getjson仅在所有之前的getjson调用完成(包括它本身)时才将数组发送给另一个函数

    <script>
        var files = new Array();

           function pushtoArray(){

        //first getjson call
        var url1 = "https://spreadsheets.google.com/feeds/list/xxxxx/xxxxx/public/values?alt=json"; 
            $.getJSON(url1, function(data) {

              var entry = data.feed.entry;

              $(entry).each(function(){
                // Column names are name, age, etc.
            count++;
             files.push({ url: this.gsx$url.$t, filename: this.gsx$name.$t });



              });

            alert(files.length);
            print_r(files);
            console.log(files);
            });//end of ajax call

        //second getjson call
    var url2 = "https://spreadsheets.google.com/feeds/list/xxxxx/xxxxx/public/values?alt=json"; 
            $.getJSON(url2, function(data) {

              var entry = data.feed.entry;

              $(entry).each(function(){
                // Column names are name, age, etc.
            count++;
             files.push({ url: this.gsx$url.$t, filename: this.gsx$name.$t });


              });

            alert(files.length);
           passArray(files);
            console.log(files);
            });//end of ajax call


            };//end of function


    function passArray(files){ 
    alert(files.length);
    console.log(files);

   // do some data filtering from array passed

        </javascript>
    <body onload="pushtoArray()">

它修正了错误

使用承诺

var promiseA = $.getJSON(urla..);
var promiseB = $.getJSON(urlb..);

$.when(promiseA, promiseB).then(function(resultA,resultB){
//do whatever you want with results.

});
编辑:这是您编辑的代码,可能是
var entry=…
的问题,如果是这样的话,请查看调试中的entry1和entry2:

var files = new Array();

function pushtoArray() {

    //first getjson call
    var url1 = "https://spreadsheets.google.com/feeds/list/xxxxx/xxxxx/public/values?alt=json";
    var url1Promise = $.getJSON(url1, function (data) {
        console.log("url1 success");
    });//end of ajax call

    //second getjson call
    var url2 = "https://spreadsheets.google.com/feeds/list/xxxxx/xxxxx/public/values?alt=json";
    var url2Promise = $.getJSON(url2, function (data) {
        console.log("url2 success");
    });//end of function

    $.when(url1Promise, url2Promise).then(function (resultFromUrl1, resultFromUrl2) {
        var entry1 = resultFromUrl1.feed.entry;
        var entry2 = resultFromUrl2.feed.entry;

        var entry = entry1.concat(entry2);

        $(entry).each(function () {
            // Column names are name, age, etc.
            count++;
            files.push({ url: this.gsx$url.$t, filename: this.gsx$name.$t });
                    alert(files.length);
                    print_r(files);
                    console.log(files);


        });


    });

谢谢你的回复。就我而言,promisesA将持有哪些数据?它是否保存所有URL和文件名?我需要提取这些值并将它们添加到数组中?如何使用Promise在数组中收集这些数据?与其在getJSON调用中添加函数,不如将调用保存为变量(例如promiseA)。保存该调用后,promiseA将保存一个具有多个函数的对象,最重要的一个是“done”,您可以向done函数传递一个接收JSON的回调方法。然而,在我的示例中,因为您希望返回多个JSON,所以您使用$。当它等待所有承诺完成时,然后您使用
。然后
将所有结果返回到同一个函数;内置when函数,但没有数据附加!在我继续之前,我想看看promisesA的内容是什么……做这个
promiseA.done(function(res){$(“#tblentatattributes tbody”).append(res)})顺便说一句,如果您只需要上面我给您的代码,并且代码上写着//do what you want you append resultA and resultB to element,您将看到这两个结果
var promiseA = $.getJSON(urla..);
var promiseB = $.getJSON(urlb..);

$.when(promiseA, promiseB).then(function(resultA,resultB){
//do whatever you want with results.

});
var files = new Array();

function pushtoArray() {

    //first getjson call
    var url1 = "https://spreadsheets.google.com/feeds/list/xxxxx/xxxxx/public/values?alt=json";
    var url1Promise = $.getJSON(url1, function (data) {
        console.log("url1 success");
    });//end of ajax call

    //second getjson call
    var url2 = "https://spreadsheets.google.com/feeds/list/xxxxx/xxxxx/public/values?alt=json";
    var url2Promise = $.getJSON(url2, function (data) {
        console.log("url2 success");
    });//end of function

    $.when(url1Promise, url2Promise).then(function (resultFromUrl1, resultFromUrl2) {
        var entry1 = resultFromUrl1.feed.entry;
        var entry2 = resultFromUrl2.feed.entry;

        var entry = entry1.concat(entry2);

        $(entry).each(function () {
            // Column names are name, age, etc.
            count++;
            files.push({ url: this.gsx$url.$t, filename: this.gsx$name.$t });
                    alert(files.length);
                    print_r(files);
                    console.log(files);


        });


    });