【问题标题】:jQuery ajax request error callbackjQuery ajax 请求错误回调
【发布时间】:2012-08-17 21:53:00
【问题描述】:

我正在测试一个 jQuery ajax 请求的错误回调,我有一个问题。下面是我的ajax请求

$.ajax({
    type:'get',
    url:'non-existant-file.php',
    data: { newFile : $('#name').val() },
    beforeSend: function() {
        // make nice image to show the request is running
    },
    success: function() {
        // show results of successfull request
    },
    error: function(jq,status,message) {
        alert('A jQuery error has occurred. Status: ' + status + ' - Message: ' + message);
    }
});

该文件不存在,仅用于测试引发的错误。我希望它返回 404 作为状态,并返回“找不到文件”作为消息。至少,当我阅读docs时,我是这样理解的:

第二个参数(除了 null)的可能值是“timeout”、“error”、“abort”和“parsererror”。发生 HTTP 错误时,errorThrown 会接收 HTTP 状态的文本部分,例如“未找到”或“内部服务器错误”。从 jQuery 1.5 开始,错误设置可以接受一个函数数组。每个函数都会被依次调用。

但是,我收到的警报与我预期的完全不同:

A jQuery error has occurred. Status: error - Message: undefined

我对文档的理解有误还是我做的不对?

【问题讨论】:

  • 如果 url 不存在,您的应用程序中是否有错误页面?
  • 喜欢默认的 404 页面?那就不要。我不。在 chrome 错误控制台中,它只是抛出 'GET localhost/km/admin/createFile.php?newFile= 404 (Not Found)' 我认为这是返回 ajax 错误的方式。

标签: jquery ajax


【解决方案1】:

您还可以使用“全局 Ajax 事件处理程序”

.ajaxError() 我在这里向您展示示例,您可以在此链接上找到更多信息。

http://api.jquery.com/ajaxError/

Ajax 请求失败时显示消息。

jQuery("#msg").ajaxError(function(event, request, settings){
  jQuery(this).append("<li>Error requesting page " + settings.url + "</li>");
});

或者你也可以像以前那样工作:)

jQuery.ajax({
 ...,
complete: function(e, XHR, options) {
  if (XHR.status == 200) { // success
  } elseif (XHR.status == 500) { // Internal Server Error
  } elseif (XHR.status == 404) { // File Not found
 }
});

【讨论】:

  • 第二部分不是和我说的一样吗:例如error: function (xhr) { alert(xhr.url + " could not be found."); }
  • 是的,但是您可以为特定的错误代码键入自定义消息,这样会更可行,我想尝试一下并告诉我。
【解决方案2】:

我认为这与您的路由服务器如何响应访问不存在的路由有关。例如,JSFiddle 会返回一条更有帮助的消息:http://jsfiddle.net/dxSma/

【讨论】:

  • 这似乎是最准确的答案。我不知道这一点,而且,这不是我所期望的。感谢您的意见。
【解决方案3】:

我将以下内容用于 jQuery AJAX 的错误处理:

error       : function( xhr ) {
    var readyState = {
        1: "Loading",
        2: "Loaded",
        3: "Interactive",
        4: "Complete"
    };
    if(xhr.readyState !== 0 && xhr.status !== 0 && xhr.responseText !== undefined) {
        alert("readyState: " + readyState[xhr.readyState] + "\n status: " + xhr.status + "\n\n responseText: " + xhr.responseText);
    }
}

也许这可以为您提供一些关于如何使其正常工作的提示。

【讨论】:

  • 它确实提供了更多信息,并且结构更好,但它返回的内容看起来像一个页面。 jsfiddle.net/dxSma/1 当所有的工作仍然需要自己完成时,为什么要让它听起来很壮观?
  • @DarkRanger 我无意让它听起来壮观,这个错误函数至少与 ASP.NET WebServices 配合得很好——具有正确的 responseText。
  • 我知道这不是你的本意。我的意思是,为什么 jQuery 背后的开发人员添加了一个错误回调,并且在文档中,让它听起来像你所需要的一切,而不是它的本来面目?这对你没有任何好处! :P 这更像是一百万美元的问题。
  • @DarkRanger 很遗憾,我没有答案。这很可能取决于您使用的后端。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-21
  • 2014-03-04
  • 1970-01-01
相关资源
最近更新 更多