jQuery.when() 方法
jQuery 雜項方法
實例
一個參數傳遞給 $.when() 被受理,執行回調函數
$(function () {
$.when( { testing: 123 } ).done(
function(x) { alert(x.testing); }
);
})
定義和用法
$.when() 函數提供一種方法來執行一個或多個對象的回調函數。
提示:如果向 jQuery.when 傳入一個延遲對象,那麼會返回它的 Promise 對象(延遲方法的一個子集)。
可以繼續綁定 Promise 對象的其他方法,例如, defered.then 。當延遲對象已經被受理(resolved)
或被拒絕(rejected)(通常是由創建延遲對象的最初代碼執行的),那麼就會調用相應的回調函數。
語法
參數 |
描述 |
deferreds
|
Deferred類型 一個或多個延遲對象,或者普通的JavaScript對象 |

更多實例
如果你不傳遞任何參數,jQuery.when()將返回一個resolved(受理)狀態的 promise 對象。
實例
不傳遞任何參數,執行回調函數
[mycode3 type="javascript"]
$(function () {
$.when().then(function( x ) {
alert( "I fired immediately" );
});
})
[/mycode3]
在多個延遲對象傳遞給jQuery.when() 的情況下,該方法返回一個新的"宿主"延遲對象,當所有的延遲對
象被受理(resolve)時,該方法才會受理它的宿主延遲對象。當其中有一個延遲對象被拒絕(rejected)時,
該方法就會拒絕它的宿主延遲對象。當宿主對象被受理時,doneCallbacks(受理回調)將被執行。
實例
傳入多個延遲對象
[mycode3 type="javascript"]
$(function () {
var d1 = $.Deferred();
var d2 = $.Deferred();
$.when( d1, d2 ).done(function ( v1, v2 ) {
alert( v1 ); // "Fish"
alert( v2 ); // "Pizza"
});
d1.resolve( "Fish" );
d2.resolve( "Pizza" );
})
[/mycode3]
如果沒有值傳遞給延遲對象的受理(resolved)事件,那麼相應的doneCallback參數
將是undefined。 如果傳遞給延遲對象的受理(resolved)事件為單個的值, 相應的參數
將保留那個值。 在傳遞給延遲對象的解決(resolved)事件為為多個值的情況下, 相應的
參數將是這些值組成的數組。
實例
傳入多個不同類型的延遲對象
[mycode3 type="javascript"]
$(function () {
var d1 = $.Deferred();
var d2 = $.Deferred();
var d3 = $.Deferred();
$.when( d1, d2, d3 ).done(function ( v1, v2, v3 ) {
alert( v1 ); // v1 is undefined
alert( v2 ); // v2 is "abc"
alert( v3 ); // v3 is an array [ 1, 2, 3, 4, 5 ]
});
d1.resolve();
d2.resolve( "abc" );
d3.resolve( 1, 2, 3, 4, 5 );
})
[/mycode3]
在多個延遲的情況下,如果延遲對象之一被拒絕(rejected),jQuery.when()觸發立即
調用 "宿主" 延遲對象的 failCallbacks 回調函數。
實例
多個延遲對象之一被拒絕時調用failCallbacks 回調函數
[mycode3 type="javascript"]
$(function () {
$.when($.ajax("/page1.php"), $.ajax("/page2.php")).then(function(data, textStatus, jqXHR){
alert(jqXHR.status); }, function(obj){
alert(obj.statusText);
});
})
[/mycode3]
jQuery 雜項方法