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

标签 javascript arrays ajax getjson

我必须进行几次 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 entry1 = resultFromUrl1.feed.entry;
        var entry2 = resultFromUrl2.feed.entry;

 var entry1 = resultFromUrl1[0].feed.entry;
    var entry2 = resultFromUrl2[0].feed.entry;

它修复了错误!

最佳答案

使用 promise 。

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);


        });


    });

关于javascript - 如何仅在所有 getjson 调用完成时将对象数组传递给另一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32914899/

相关文章:

javascript - 从通过 eventListener 删除的 <li> 标签中获取字符串,并将其从数组中删除

java - 为什么我会收到 ArrayIndexOutOfBoundsException 错误?

javascript - 如何在servlet中通过ajax获取数据?

php - 使用 AJAX 调用和 JSON 数据填充表单

javascript - Reactjs: TypeError: 无法读取未定义的属性 'eventSlots'

javascript - Web应用程序在客户端存储大量数据

javascript - 链接函数中的 $scope.watch()

javascript - 如何给具有相同类名的元素在 javascript 中执行相同的功能?

javascript - 触发表格行的点击事件

C - 输出比文件中的大(大小问题)