理解jquery完成/失败/总是在幕后

时间:2014-02-28 12:09:52

标签: javascript jquery

我知道如何使用这样的jquery ajax。换句话说,我理解.fail在失败时被调用等。

var jqxhr = $.ajax( "example.php" )
  .done(function() {
    alert( "success" );
  })
  .fail(function() {
    alert( "error" );
  })
  .always(function() {
    alert( "complete" );
  });

我也理解$.ajax("example.php")返回一个表示DOM的一部分的对象,并且有一些匿名函数作为参数传递给done / fail / always。到现在为止还挺好。我也得到方法链(或“级联”):对象上的函数调用如何返回对象,因此您可以使用链中的下一个方法再次调用该对象。

但是,我试图理解jquery如何“知道”从上面链中调用哪些方法。它不像完成返回然后失败(链中的下一个方法)被调用。那么这种语法会发生什么?它是如何在引擎盖下工作的?

2 个答案:

答案 0 :(得分:5)

实际上,$.ajax()不返回表示DOM的一部分的对象,而是返回promise

您可以阅读有关承诺here的更多信息。

答案 1 :(得分:2)

来自https://api.jquery.com/jQuery.ajax/

的引用
  

jQuery 1.5中$ .ajax()返回的jqXHR对象实现了   Promise接口,为它们提供所有属性,方法和   Promise的行为(有关更多信息,请参阅Deferred对象)。   这些方法采用一个或多个函数参数   $ .ajax()请求终止。这允许您分配多个   单个请求上的回调,甚至在回调之后分配回调   请求可能已经完成。 (如果请求已经完成,那么   立即触发回调。)jqXHR的可用Promise方法   对象包括:...

https://api.jquery.com/category/deferred-object/

了解详情