我希望有一个函数接受一个url数组作为参数,然后异步下载每个url的json,当所有都完成后做一些函数。
首先,我有一个函数,它返回 ajax 以获取一个 url(延迟/承诺对象)。
function get_json(url) {
/* Asynchronously download data of type json */
return $.ajax({url: url,
dataType: 'json'});
}
执行以下工作:
var url = 'http://data.hisparc.nl/api/station/501/';
get_json(url).done(function(data){console.log(data)});
所以,现在我希望能够提供一个 url 数组,然后能够在完成后附加一个 done 来做某事。我想出了这个:
function get_multiple_json(urls) {
/* Asynchronously download multiple urls of type json */
return $.when($.each(urls, function(i, url) {return get_json(url);}));
}
所以我认为这可行:
var urls = ['http://data.hisparc.nl/api/station/501/',
'http://data.hisparc.nl/api/station/505/'];
get_multiple_json(urls).done(function() {alert('hi')});
但是在 ajax 完成之前引发了警报,似乎 $.each 没有返回延迟对象。
那么我该怎么做呢?