2013-08-16 4 views
65

Die Fragen:jQuery Ajax() mit Erfolg, Fehler und vollständige vs .done(), .fail() und immer()

  1. Sollten wir unsere Codierung, wie unten vorgeschlagen ändern?
  2. Gibt es einen Unterschied zwischen .done() & success:, .fail() & error: und .always() & complete:?

Die Präambel:

Ich war zusammen einen jQuery.ajax Aufruf setzen, die ich erfolgreich auch in der Vergangenheit getan haben. Etwas wie folgt aus:

$.ajax(
    { 
     url: someUrl, 
     type: 'POST', 
     data: someData, 
     datatype: 'json', 
     success: function (data) { someSuccessFunction(data); }, 
     error: function (jqXHR, textStatus, errorThrown) { someErrorFunction(); } 
    }); 

Während einen kurzen Blick auf einige Dokumentation nehmen, stieß ich auf eine Referenz besagt, dass der Erfolg, Fehler und vollständige Rückrufe als von jQuery 1.8 sind veraltet. Verwenden Sie stattdessen jqXHR.done(), jqXHR.fail() und jqXHR.always(), um den Code für das Entfernen vorzubereiten.

Wir sollten daher etwas anfangen Codierung wie diese statt:

$.ajax("example.php") 
    .done(function (data) { someSuccessFunction(data); }) 
    .fail(function (jqXHR, textStatus, errorThrown) { someErrorFunction(); }) 
    .always(function() { alert("complete"); }); 
+1

i die zweite Methode bevorzugen ... wo das Versprechen von Ajax zurück verwendet wird –

+6

Die Rückrufe werden nicht mehr unterstützt. Die verwandten Methoden auf dem jqxhr-Objekt sind. –

+0

Ich stimme Arun zu, auch ich denke, das ist persönlich einfacher zu lesen – Rooster

Antwort

34

Nun ist es kein Vorteil, dass in dieser besonderen Situation zu tun.

Der Punkt der .done().fail().always() Methoden ist, dass Sie mehrere Handler

  • Sie so überall und nicht nur beim Aufruf $.ajax
  • Wenn Sie an der $.ajax Anruf

    1. anhängen Da nur einzelne Handler angeschlossen werden, kommen diese Vorteile nicht wirklich ins Spiel.

      So können Sie das Versprechen zurückgeben und andere können ihre eigenen Handler anhängen.

      Beispiel ist erfrischend Plugins nach Ajax-Request:

      $.ajaxPrefilter(function(opt, origOpt, jqxhr) { 
          jqxhr.always(function() { 
           $("[data-plugin]").plugin(); 
          }); 
      }); 
      
    +3

    FYI - Laut der [docs] (http://api.jquery.com/jQuery.ajax/) ab jQuery 1.5 akzeptieren die 'complete',' error' und 'success' Einstellungen eine Reihe von Callback-Funktionen, Sie können also mehrere Handler anhängen. – user9645

    +0

    für # 2: wo sonst würden diese Methoden außer beim Aufrufen von '$ .ajax()' verwendet werden? Funktionieren diese Methoden nur auf jqxhr-Empfängern? – ahnbizcad

    Verwandte Themen