使用 jQuery AJAX 捕获 404 状态
Posted
技术标签:
【中文标题】使用 jQuery AJAX 捕获 404 状态【英文标题】:Capture 404 status with jQuery AJAX 【发布时间】:2012-06-11 11:24:45 【问题描述】:我有这个代码:
$.ajax( cache: false,
url: "/Admin/Contents/GetData",
data: accountID: AccountID ,
success: function (data)
$('#CityID').html(data);
,
error: function (ajaxContext)
alert(ajaxContext.responseText)
);
我仍然对 ajaxContext 以及如何捕获 404 返回码感到困惑。不过我还有一个问题。我正在阅读有关成功和失败编码的内容,并且在最新版本的 jQuery 中不再使用错误。
所以我应该更改我的代码以使用完成并失败。那我怎么检查 404 呢?
【问题讨论】:
使用 .fail() 将如何工作? 【参考方案1】:如下替换你的错误函数...
error:function (xhr, ajaxOptions, thrownError)
if(xhr.status==404)
alert(thrownError);
【讨论】:
我之前遇到过错误:函数(jqXHR、textStatus、errorThrown)。 ajaxOptions 是否正确。应该是 textStatus 吗? 为我工作,不明白为什么不,但愿意以不同的方式被告知。 只是想注意这不适用于跨域调用。它将静默失败,并且不会执行“完成”或“错误”回调参数。 .fail 方法自 jQuery 1.7 起已弃用,您现在应该使用 .fail api.jquery.com/deferred.fail【参考方案2】:404 错误将由连接到 error
属性的匿名函数处理。除了对 URL 的成功 HTTP 请求(即 2xx)之外的任何内容都会触发错误方法。以下将适用于您的目的:
error : function(jqXHR, textStatus, errorThrown)
if(jqXHR.status == 404 || errorThrown == 'Not Found')
console.log('There was a 404 error.');
当他们在 jQuery 文档中提到删除 success
和 error
函数时,他们指的是 jqXHR 类的函数,而不是 $.ajax()
的属性。
【讨论】:
但是 JayTee 对匿名函数的编码是否正确?我之前的尝试只是将一个变量 ajaxContent 放在函数后的 parathasis 中。 回调函数接受三个参数:jqXHR(在 jQuery 1.4.x 中,XMLHttpRequest)对象、描述发生错误类型的字符串和可选的异常对象。发生 HTTP 错误时,errorThrown 会接收 HTTP 状态的文本部分,例如“未找到”或“内部服务器错误”。以上是关于使用 jQuery AJAX 捕获 404 状态的主要内容,如果未能解决你的问题,请参考以下文章
使用 JSONP 时如何捕获 jQuery $.getJSON(或数据类型设置为“jsonp”的 $.ajax)错误?
预检具有无效的 HTTP 状态代码 404 Jquery AJAX POST