我必须进行几次 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/