jQuery ajax请求错误回调

时间:2012-08-22 12:59:11

标签: jquery ajax

我正在测试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作为状态,并且'File not found'作为消息。至少,当我阅读docs

时,我就是这样理解的
  

第二个参数的可能值(除了null)是“timeout”,“error”,“abort”和“parsererror”。发生HTTP错误时,errorThrown会收到HTTP状态的文本部分,例如“Not Found”或“Internal Server Error”。从jQuery 1.5开始,错误设置可以接受一系列函数。每个函数将依次调用。

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

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

我是否理解文档错误或我是不是做得不对?

3 个答案:

答案 0 :(得分:1)

我使用以下内容进行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);
    }
}

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

答案 1 :(得分:1)

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

答案 2 :(得分: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
 }
});