$.ajax("example.php").done(function ()
 {
     alert(...);
 }).fail(function ()
 {
     alert(...);
 }).always(function ()
 {
      alert(...);
 });




  $.ajax("example.php",

      success: function ()
      {
          alert('');
      },
      error: function ()
      {
          alert('');
      },
      complete: function ()
      {
          alert('');
      }
  );


对不起,我看不到任何优势

你能解释一下吗?

或者,您能否举一个前者无法通过后者完成的示例...?

最佳答案

对于初学者来说,第二个代码块在语法上甚至都不有效。我称之为第一个:P的优势



但说真的:

这是达到相同最终结果的不同语法。一个直接的好处是,您可以为每个结果延迟连接多个功能:

$.get("example.php").done(function ()
{
    alert("success 1");
}).done(function ()
{
    alert("success 2");
});


否则,您必须这样做:

function done1()
{
    alert('success 1');
}
function done2()
{
    alert('success 2');
}

$.ajax('example.php',
{
    success: function ()
    {
        done1.apply(this, arguments);
        done2.apply(this, arguments);
    }
});




其他优势,引自How can jQuery deferred be used?


  
  对于任务可能会异步执行或可能不会异步执行以及您希望将该条件从代码中抽象出来的情况,Deferreds非常适合。
  ...从多个来源获取数据。在下面的示例中,我将获取现有应用程序中使用的多个独立的JSON模式对象,以在客户端和REST服务器之间进行验证。在这种情况下,我不希望浏览器端应用程序在加载所有模式之前就开始加载数据。 $ .when.apply()。then()对此非常适合。
  可以使用延期代替互斥量。这基本上与多种ajax使用方案相同。

07-28 06:47