使用 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 文档中提到删除 successerror 函数时,他们指的是 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

Jquery ajax 不进入success而进入error,状态为4请求404

尝试使用 JQuery 捕获日志失败和 404

JQuery $.ajax 捕获异常信息

如何使用 jQuery 在 JSON ajax 请求中回调 404 上的函数?