2012-06-07 4 views
111

ich so codiert haben:Sollte ich .done() und .fail() für neue jQuery AJAX-Code statt Erfolgs- und Fehler

$.ajax({ cache: false, 
    url: "/Admin/Contents/GetData", 
    data: { accountID: AccountID }, 
    success: function (data) { 
     $('#CityID').html(data); 
    }, 
    error: function (ajaxContext) { 
     alert(ajaxContext.responseText) 
    } 
}); 

Aber wenn ich mir die jQuery .ajax() documentation am Ende es scheint darauf hinzudeuten ich so Codierung unten oder zumindest sollte es schlägt eine .done() und .fail() Zugabe:

var request = $.ajax({ cache: false, 
    url: "/Admin/Contents/GetData", 
    data: { accountID: AccountID } 
}); 

request.done(function (data) { 
    xxx; 
}); 
request.fail(function (jqXHR, textStatus) { 
    xxx; 
}); 

aktualisieren

Wenn ich so Code code ist es das gleiche oder gibt es einen Vorteil, es in drei zu brechen?

$.ajax({ cache: false, 
    url: "/Admin/Contents/GetData", 
    data: { accountID: AccountID } 
}).done(function (data) { 
    xxx; 
}).fail(function (jqXHR, textStatus) { 
    xxx; 
}); 

Antwort

112

Wie user2246674 angegeben, success und error als Parameter der Ajax-Funktion gültig ist.

Um mit Präzedenzfall Antwort konsistent zu sein, die doc lesen:

Deprecation Notice:

The jqXHR.success(), jqXHR.error(), and jqXHR.complete() callbacks will be deprecated in jQuery 1.8. To prepare your code for their eventual removal, use jqXHR.done(), jqXHR.fail(), and jqXHR.always() instead.

Wenn Sie die Rückruf-Manipulationsfunktion (Verwendung von Methode Verkettungs zum Beispiel) verwenden, verwenden .done(), .fail() und .always() statt success(), error() und complete().

+0

Das ist, was ich dachte, aber als ich ein paar Fragen über den Statuscode gepostet hatte, erwähnte niemand dies noch, nachdem ich es getan hatte. – Alan2

+0

@Gemma Vertraue dem Dev-Team, wenn es heißt, dass es in zukünftigen Versionen entfernt werden kann und dass es besser ist, die neuen zu verwenden, benutze die neuen. –

+0

danke und ja ich werde den neuen Weg nutzen. Hast du mein Update am Ende gesehen? Ich frage mich, ob mein letztes Code-Snippet der beste Weg ist, es zu tun. Ich bin mir nicht sicher, welchen Vorteil es hat, den Code in drei zu zerlegen. – Alan2

6

Ich möchte etwas auf @ Michael Laffargue der Beitrag hinzuzufügen:

jqXHR.done() ist schneller!

jqXHR.success() haben einige Ladezeit im Callback und manchmal Skript übertreiben können. Das finde ich auf hartem Weg vorher.

UPDATE:

Mit jqXHR.done(), jqXHR.fail() und jqXHR.always() Sie können besser mit Ajax-Request manipulieren. Generell können Sie in einer Variablen oder einem Objekt eine Achse definieren und diese Variable oder das Objekt in einem beliebigen Teil Ihres Codes verwenden und Daten schneller abrufen. Gutes Beispiel:

/* Initialize some your AJAX function */ 
function call_ajax(attr){ 
    var settings=$.extend({ 
     call   : 'users', 
     option   : 'list' 
    }, attr); 

    return $.ajax({ 
     type: "POST", 
     url: "//exapmple.com//ajax.php", 
     data: settings, 
     cache : false 
    }); 
} 

/* .... Somewhere in your code ..... */ 

call_ajax({ 
    /* ... */ 
    id : 10, 
    option : 'edit_user' 
    change : { 
      name : 'John Doe' 
    } 
    /* ... */ 
}).done(function(data){ 

    /* DO SOMETHING AWESOME */ 

}); 
+4

Haben Sie glaubwürdige und überprüfbare Referenzen? –

+0

@PaulVargas Ich mache nie einen Leistungstest, aber in meiner Praxis finde ich, dass dies funktioniert. Sie können es selbst versuchen. –

3

In einfachen Worten

$.ajax("info.txt").done(function(data) { 
    alert(data); 
}).fail(function(data){ 
    alert("Try again champ!"); 
}); 

wenn sein erhalten die info.text dann alarmiert es und was Funktion, die Sie hinzufügen oder wenn überhaupt, wie nicht in der Lage info.text vom Server abgerufen werden dann Alarm- oder Fehlerfunktion.

Verwandte Themen