2
我想了解更多關於jQuery推遲/承諾。我有點理解你什麼時候想做1個Ajax調用,但是怎麼做多個(x個)Ajax調用呢?這裏是我想要做的jsfiddle:http://jsfiddle.net/vRJ7v/jQuery推遲/承諾與許多getJSON
例如(使用LastFM等API):
var last_fm_url = 'http://ws.audioscrobbler.com/2.0/?method=user.gettoptracks&user=';
var apiKey = //my lastfm api key;
var user_list = ['user1','user2'.....'userX'];
var getTracks = function(user){
var dfd, last_fm_url;
dfd = $.Deferred();
last_fm_url = last_fm_url + user + '&limit=10&period=3month&api_key='+ apiKey +'&format=json';
$.getJSON(last_fm_url).done(function(results) {
dfd.resolve();
}).fail(function(error) {
dfd.reject();
});
return dfd.promise();
};
var fetchMultipleTracks = function(){
var dfd, user_list_count, promises = [];
var dfd = $.Deferred();
user_list_count = user_list.length;
for(var i = 0; i < user_list_count; i++){
promises.push(getTracks(user_list[ i ]));
}
$.when(promises).done(function(results){
dfd.resolve();
});
return dfd.promise();
};
var test = fetchMultipleTracks();
test.done(function(results){
console.log(results);
}, function(error){
// error
});
但我似乎無法返回的實際結果,它只是返回http://d.pr/i/N5Yi
謝謝,但是當我嘗試這一點,只能通過1個用戶環路。這是我的完整代碼的jsfiddle。 http://jsfiddle.net/vRJ7v/ – cusejuice
沒錯,因爲'結果'是第一個請求的結果。第二個參數將用於第二個請求,第三個將用於第三個,依此類推。 'console.log(arguments)' –
嗯,我如何輸出user_list數組中輸入的每個用戶的所有曲目?如果我在user_list中有10個用戶,那麼我需要在10個參數中進行硬編碼?有沒有一種方法可以將結果合併到一個大數組中? – cusejuice