如何在$ .when函数中得到getjson promise的结果?

时间:2015-10-02 21:45:59

标签: javascript ajax

使用以下代码我尝试仅在两个getjson调用完成时才将2个getjson调用的数据导入到数组中。代码给了我这个错误:

resultFromUrl1.feed is undefined
var entry1 = resultFromUr11.feed.entry;

我看了f12,我看到两个getjson都成功执行但没有数据放入数组!如何解决这个错误?我应该使用$ .when(url1Promise,url2Promise).then或$ .when(url1Promise,url2Promise).done?

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


                });


            });
        }//end of function 
            </javascript>
            <body onload="pushtoArray()">

2 个答案:

答案 0 :(得分:2)

jQuery ajax函数与$.when()一起使用有点痛苦。 resultFromURL1中的内容实际上是由三个值组成的数组:[data, textStatus, jqXHR]

所以,你需要改为:

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

此外,您应该在$.when().then()构造中添加错误处理程序,以便查看getJSON()来电中是否发生错误。

答案 1 :(得分:1)

我使用此网址尝试了您的示例:“https://spreadsheets.google.com/feeds/list/o13394135408524254648.240766968415752635/od6/public/values?alt=json

工作正常.. 您正在接收数据。您可以通过编写

来访问数据
resultFromUrl1[0].feed.entry
resultFromUrl2[0].feed.entry;