1

我正在测试 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 作为状态,并返回“找不到文件”作为消息。至少,这就是我阅读文档时的理解:

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

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

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

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

4

3 回答 3

2

我将以下内容用于 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);
    }
}

也许这可以给你一些关于如何让它正常工作的提示。

于 2012-08-22T13:09:57.130 回答
1

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

于 2012-08-22T13:10:03.760 回答
0

您还可以使用“全局 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
 }
});
于 2012-08-22T13:15:15.050 回答