我编码如下:
$.ajax({ cache: false,
url: "/Admin/Contents/GetData",
data: { accountID: AccountID },
success: function (data) {
$('#CityID').html(data);
},
error: function (ajaxContext) {
alert(ajaxContext.responseText)
}
});
但是当我最后查看jQuery .ajax()
documentation时,似乎建议我应该像下面这样编码,或者至少它建议添加.done()
和.fail()
:< / p>
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;
});
答案 0 :(得分:144)
如user2246674所述,使用success
和error
作为ajax函数的参数是有效的。
与先前的答案保持一致,阅读文档:
弃用通知:
jQuery 1.8中将弃用jqXHR.success(),jqXHR.error()和jqXHR.complete()回调。要准备最终删除的代码,请改用jqXHR.done(),jqXHR.fail()和jqXHR.always()。
如果您正在使用回调操作函数(例如使用方法链接),请使用.done()
,.fail()
和.always()
代替success()
,{{1 }和error()
。
答案 1 :(得分:11)
我想在@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 */
});
答案 2 :(得分:6)
简单来说就是
$.ajax("info.txt").done(function(data) {
alert(data);
}).fail(function(data){
alert("Try again champ!");
});
如果它获取了info.text,那么它将发出警告,无论你添加什么功能,或者如果有任何无法从服务器检索info.text然后提醒或错误功能。
答案 3 :(得分:0)
当我们要在旧的现有应用程序中将JQuery从1.x迁移到2x或3.x时,我们将使用.done,.fail而不是success,error,因为JQuery up gradation将被弃用。例如,当我们调用服务器Web方法时,服务器将Promise对象返回给调用方法(Ajax方法),并且该Promise对象包含.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.
});