1
我不得不做幾個getjson調用來從谷歌電子表格中獲取一些數據,並將我需要的數據存儲到一個數組,並過濾數組並顯示數據。我的第一個getjson完成之前,我的當前代碼需要大量的數據傳遞數組,所以我最終得到了數組中的不完整數據!如何在所有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;
,並固定錯誤!
感謝您的答覆。在我的情況下promisesA會持有什麼數據?它是否包含所有的url和文件名?我需要提取這些值並將它們添加到數組中?如何使用promies在數組中收集這些數據? – user1788736
而不是將函數添加到getJSON調用中,只需將該調用另存爲變量(例如promiseA)即可。一旦你保存了這個調用,promiseA將持有一個具有幾個函數的對象,最重要的一個是「完成」,你可以傳遞給完成函數一個接收JSON的回調方法。然而在我的例子中,因爲你想要返回幾個JSON,你可以使用$ .when來等待所有的promise完成,然後使用'.then'來獲得所有結果到同一個函數。 – Saar
在jQuery API中查看https://api.jquery.com/jquery.when/ – Saar