Должен ли я использовать.done() и.fail() для нового кода JQuery AJAX вместо успеха и ошибки
Я закодировал так:
$.ajax({ cache: false,
url: "/Admin/Contents/GetData",
data: { accountID: AccountID },
success: function (data) {
$('#CityID').html(data);
},
error: function (ajaxContext) {
alert(ajaxContext.responseText)
}
});
Но когда я смотрю на JQuery .ajax()
документация в конце, кажется, предлагает мне кодировать, как это ниже или, по крайней мере, предлагает добавить .done()
и .fail()
:
var request = $.ajax({ cache: false,
url: "/Admin/Contents/GetData",
data: { accountID: AccountID }
});
request.done(function (data) {
xxx;
});
request.fail(function (jqXHR, textStatus) {
xxx;
});
Обновить
Если я кодирую так, это то же самое или есть какое-то преимущество, если разбить его на три части?
$.ajax({ cache: false,
url: "/Admin/Contents/GetData",
data: { accountID: AccountID }
}).done(function (data) {
xxx;
}).fail(function (jqXHR, textStatus) {
xxx;
});
3 ответа
Как указано user2246674, используя success
а также error
в качестве параметра функции ajax действителен.
Чтобы соответствовать прецедентному ответу, прочитайте документацию:
Уведомление об устаревании:
Обратные вызовы jqXHR.success (), jqXHR.error () и jqXHR.complete () будут устаревшими в jQuery 1.8. Чтобы подготовить ваш код для их возможного удаления, используйте взамен jqXHR.done (), jqXHR.fail () и jqXHR.always().
Если вы используете функцию обратного вызова (например, цепочку методов), используйте .done()
, .fail()
а также .always()
вместо success()
, error()
а также complete()
,
Я хочу добавить кое-что на пост @Michael Laffargue:
jqXHR.done()
быстрее!
jqXHR.success()
иметь некоторое время загрузки в обратном вызове и иногда может перебить сценарий. Я нахожу это трудным путем раньше.
ОБНОВИТЬ:
С помощью jqXHR.done()
, jqXHR.fail()
а также jqXHR.always()
Вы можете лучше манипулировать с помощью запроса AJAX. Как правило, вы можете определить ajax в некоторой переменной или объекте и использовать эту переменную или объект в любой части вашего кода и быстрее получать данные. Хороший пример:
/* 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 */
});
Простыми словами
$.ajax("info.txt").done(function(data) {
alert(data);
}).fail(function(data){
alert("Try again champ!");
});
если он получит info.text, то он будет предупреждать и любую функцию, которую вы добавляете, или, если есть, какую-либо неспособность получить info.text с сервера, тогда функция оповещения или ошибки
Когда мы собираемся перенести JQuery с 1.x на 2x или 3.x в нашем старом существующем приложении, тогда мы будем использовать.done,.fail вместо success,error, поскольку эти методы будут устаревшими. Например, когда мы вызываем веб-методы сервера, сервер возвращает объекты обещаний вызывающим методам (методы Ajax), и эти объекты обещаний содержат методы.done,.fail..etc. Следовательно, мы будем делать то же самое для успешных и неудачных ответов. Ниже приведен пример (он предназначен для запроса POST так же, как мы можем построить для типа запроса, такого как GET...)
$.ajax({
type: "POST",
url: url,
data: '{"name" :"sheo"}',
contentType: "application/json; charset=utf-8",
async: false,
cache: false
}).done(function (Response) {
//do something when get response })
.fail(function (Response) {
//do something when any error occurs.
});