调用 jquery ajax - .fail vs. :error
Posted
技术标签:
【中文标题】调用 jquery ajax - .fail vs. :error【英文标题】:Call to jquery ajax - .fail vs. :error 【发布时间】:2012-10-21 12:55:25 【问题描述】:我应该使用哪一个?
有什么理由使用其中一个而不是另一个?
一种更适合错误处理吗?
$.ajax(
url: url,
data: start: start, end: end
).done(function(data, textStatus, jqXHR)
$('#myElement').append(data);
).fail(function()
// report error
);
或
$.ajax(
url: url,
data: start: start, end: end ,
success: function(data, textStatus, jqXHR)
$('#myElement').append(data);
,
error: function(jqXHR, textStatus, errorThrown)
// report error
);
【问题讨论】:
【参考方案1】:这两个选项是等价的。
不过,promise 样式的接口(@987654322@ 和 .done()
)允许您将创建请求的代码与处理响应的代码分开。
您可以编写一个发送 AJAX 请求并返回 jqXHR 对象的函数,然后在其他地方调用该函数并添加一个处理程序。
当与.pipe()
函数结合使用时,promise 样式的接口还可以帮助减少在进行多个 AJAX 调用时的嵌套:
$.ajax(...)
.pipe(function()
return $.ajax(...);
)
.pipe(function()
return $.ajax(...);
)
.pipe(function()
return $.ajax(...);
);
【讨论】:
“从 jQuery 1.8 开始,不推荐使用 deferred.pipe() 方法。应该使用替代它的 deferred.then() 方法。” api.jquery.com/deferred.pipe【参考方案2】:只是为了刷新一下......
从 jQuery 1.8 开始,成功和错误方法已被弃用。
jQuery Ajax
弃用通知:jqXHR.success()、jqXHR.error() 和 jqXHR.complete() 回调自 jQuery 1.8 起已弃用。要为最终删除代码做好准备,请改用 jqXHR.done()、jqXHR.fail() 和 jqXHR.always()。
【讨论】:
这实际上是对jqXHR
对象上的error()
的弃用,而不是$.ajax
本身,这是用户所指的。
@AdamGrant, $.ajax
返回 jqXHR
,所以@slohr 是正确的。
你是对的。我应该改写我的评论,对success
和error
的弃用不适用于传递给$.ajax()
的对象级函数
在这上面花了几个小时,是的,我发现弃用的是方法,而不是你传递给 $.ajax()
的选项。【参考方案3】:
使用chainable deferred object promise 样式可以实现更简洁的结构并使用always。
let data = "key":"value"
$.ajax(
type: 'PUT',
url: 'http://example.com/api',
contentType: 'application/json',
data: JSON.stringify(data),
).done(function ()
console.log('SUCCESS');
).fail(function (msg)
console.log('FAIL');
).always(function (msg)
console.log('ALWAYS');
);
【讨论】:
以上是关于调用 jquery ajax - .fail vs. :error的主要内容,如果未能解决你的问题,请参考以下文章
jQuery 全局 ajax 错误处理程序在“本地”之前触发
JQuery ajax调用asp.net的webMethod