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