我想要的是以異步模式運行代碼以獲得更快的響應(多線程)。asyn foreach在jQuery
我有一個數組像「源」與飼料,我想要的是從每一個獲取數據。
我想是這樣的:
$.each(sources, function(key, val) {
JSON CALL OF EACH SOURCE
}
,然後組所有的結果在一個數組,並告訴他們。問題是我想要在異步模式下的json調用,因爲它們中的一些需要一些時間。
我怎麼能在jQuery異步模式下做'每個'?
我想要的是以異步模式運行代碼以獲得更快的響應(多線程)。asyn foreach在jQuery
我有一個數組像「源」與飼料,我想要的是從每一個獲取數據。
我想是這樣的:
$.each(sources, function(key, val) {
JSON CALL OF EACH SOURCE
}
,然後組所有的結果在一個數組,並告訴他們。問題是我想要在異步模式下的json調用,因爲它們中的一些需要一些時間。
我怎麼能在jQuery異步模式下做'每個'?
使用延遲對象:
// get an array of jqXHR objects - the AJAX calls will
// run in parallel, subject to browser limits on the number
// of concurrent connections to each host
var defs = $.map(sources, function() {
return $.ajax({ url: this });
});
// when they're all done, invoke this callback
$.when.apply($, defs).done(function() {
// "arguments" array will contain the result of each AJAX call
...
});
要改變AJAX功能,這樣只返回data
的說法,你可以用.pipe()
:
var defs = $.map(sources, function() {
return $.ajax({ url: this }).pipe(function(data, text, jqxhr) {
return data; // filtered result
});
});
這樣做: $ .when.apply($,defs).done(function(data) console.log(數據); 我得到的是這樣的: [ 陣列[88] ,「成功」, 對象 ] 的數據是數組[88]中,但我怎麼能訪問它?對不起,但林掙扎着這一點,答案必須很容易 – themazz
@themazz你會得到一個這樣的條目爲每個AJAX調用 - 使用'參數'僞陣列(每個代碼)來訪問它們。啊,我知道,每個元素也包含AJAX'textStatus'和'jqXHR'結果。因此,要訪問第n組數據,請使用'arguments [n] [0]' – Alnitak
@themazz有一種方法可以簡化此操作 - 我將編輯答案 – Alnitak
參閱此http://www.bennadel。 com/blog/2326-jQuery-whenSync-Plugin-For-Chaining-Asynchronous-Callbacks-Using-Deferred-Objects.htm –