jquery 手册
Ajax
属性(Attributes)
回调对象(Callbacks ..
核心(Core)
CSS
数据(Data)
延迟对象(Deferred o ..
尺寸(Dimensions)
效果(Effects)
事件(Events)
表单(Forms)
文档操作(Manipulati ..
杂项(Miscellaneou ..
位置(Offset)
插件编写(Plugin Aut ..
属性(Properties)
选择器(Selectors)
遍历(Traversing)
工具(Utilities)

Returns: PromisePromise jQuery.when( Deferred deferreds )

描述: 提供一种方式来执行一个或多个对象的回调函数,延迟对象(Deferred)通常表示异步事件。
  • version added: 1.5
  • jQuery.when( Deferred deferreds )
  • deferreds 一个或多个延迟对象,或者普通的JavaScript对象.

如果单一延迟传递给jQuery.when ,它是通过这个方法和延迟对象附加的其他方法可访问绑定的回调函数返回的,如deferred.then 。当延迟得到解决或者拒绝,通常的代码创建了原来的延迟,适当的回调将被调用。例如,jqXHR对象返回jQuery.ajax是一个延期,可以用这种方式:

$.when( $.ajax("test.aspx") ).then(function(ajaxArgs){ 
     alert(ajaxArgs[1]); /* ajaxArgs is [ "success", statusText, jqXHR ] */
});

如果一个参数被传递给jQuery.when ,这不是延迟,这将被视为延迟解决,并立即将执行附加任何doneCallbacks。该doneCallbacks传递原始的参数。在这种情况下,任何failCallbacks您可能会设置是永远不会被调用,因为延迟从不拒绝。例如:

$.when( { testing: 123 } ).done(
   function(x){ alert(x.testing); } /* alerts "123" */
);

Examples:

例子:

在两个ajax请求成功后执行一个函数.
$.when($.ajax("/page1.php"), $.ajax("/page2.php")).done(function(a1,  a2){
    /* a1 and a2 are arguments resolved for the 
        page1 and page2 ajax requests, respectively */
   var jqXHR = a1[2]; /* arguments are [ "success", statusText, jqXHR ] */
   if ( /Whip It/.test(jqXHR.responseText) ) {
      alert("First page has 'Whip It' somewhere.");
   }
});

Example:

当两个ajax请求都成功时执行myFunc函数,如果任意一个出错执行 myFailure.
$.when($.ajax("/page1.php"), $.ajax("/page2.php"))
  .then(myFunc, myFailure);