【问题标题】:Capture 404 status with jQuery AJAX使用 jQuery AJAX 捕获 404 状态
【发布时间】: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() 将如何工作?

标签: jquery http-status-code-404


【解决方案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 状态的文本部分,例如“未找到”或“内部服务器错误”。
猜你喜欢
  • 2018-08-30
  • 1970-01-01
  • 1970-01-01
  • 2019-04-11
  • 1970-01-01
  • 1970-01-01
  • 2019-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多