javascript - 使用 jQuery.each 获取多个 ajax,当 (jQuery.when) 全部完成时执行某些操作

标签 javascript jquery ajax each .when

我希望有一个函数,它接受 url 数组作为参数,然后异步下载每个 url 的 json,并在所有完成后执行一些函数。

首先,我有一个函数,它返回 ajax 以获取一个 url(延迟/ promise 对象)。

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 数组,然后能够附加一个完成以在完成时执行某些操作。我想出了这个:

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没有返回延迟对象。

那么我应该怎么做呢?

最佳答案

使用$.map而不是$.each :

var urls = ['http://data.hisparc.nl/api/station/501/',
            'http://data.hisparc.nl/api/station/505/'];

$.when.apply(null, urls.map(function (url) {
    return $.ajax({ url: url, dataType: 'json' });
})).then(function () {
   alert("hi");
});

关于javascript - 使用 jQuery.each 获取多个 ajax,当 (jQuery.when) 全部完成时执行某些操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18590201/

相关文章:

javascript - 在 Node.js 中使用 Import 命令

jquery - MVC3 ajax 将多个复选框值发送到 Controller

javascript - jQuery IE9-10 : unable to get property replace of undefined or null reference

javascript - 如何在加载 iFrame 时显示加载消息?

c# - 将数据传递到由 Javascript 打开的 ModalPopupExtender

javascript - jQuery UI 自动完成 : setting css of list items in javascript

javascript - Unicode <input> 值在浏览器之间显示不同

Javascript 填充选择框

javascript - Ajax 和 Php 帖子问题

javascript - 为什么我的 ajax 函数返回 false?