2
jquery 지연/약속에 대해 자세히 배우려고합니다. 일종의 아약스 콜을하고 싶을 때 일종의 이해하지만 여러 건 (x 번호) 아약스 콜을 함께하면 어떨까요?jQuery Deferred/많은 getJSON과의 약속
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를 반환합니다 (lastFM API를 사용하여) 예를 들어 http://jsfiddle.net/vRJ7v/
: 여기에 내가 할 노력하고있어의 jsfiddle이다
감사합니다,하지만, 그것은 단지 한 사용자를 반복합니다. 여기 내 완전한 코드의 jsfiddle입니다. http://jsfiddle.net/vRJ7v/ – cusejuice
,'results'는 첫 번째 요청의 결과이므로. 두 번째 인수는 두 번째 요청에 사용되며 세 번째 인수는 세 번째 요청에 사용됩니다. 'console.log (arguments)' –
흠, user_list 배열에 입력 한 각 사용자의 모든 트랙을 어떻게 출력 할 수 있습니까? user_list에 10 명의 사용자가있는 경우 10 개의 인수로 하드 코딩해야합니다. 결과를 대신 하나의 큰 배열로 결합 할 수있는 방법이 있습니까? – cusejuice