2012-08-22 90 views
1

我正在测试jQuery ajax请求的错误回调,我有一个问题。下面是我的Ajax请求jQuery 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'作为消息。 ATLEAST,这就是我所理解的是,当我读了docs

Possible values for the second argument (besides null) are "timeout", "error", "abort", and "parsererror". When an HTTP error occurs, errorThrown receives the textual portion of the HTTP status, such as "Not Found" or "Internal Server Error." As of jQuery 1.5, the error setting can accept an array of functions. Each function will be called in turn.

但是,我得到的警告没有像我所期待的:

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

我是理解的文档错误还是我只是不正确?

+0

你在的情况下,应用程序中有一个错误页的URL不存在? – davids

+0

像一个默认的404页面?那就不要。我不。在铬错误控制台它只是抛出'GET http://localhost/km/admin/createFile.php?newFile = 404(未找到)',我会想到的是,将返回ajax错误的方式。 – Albert

回答

1

我相信它与您的路由服务器如何响应访问不存在的路由有关。的jsfiddle,例如,将返回一个稍微有用的信息:http://jsfiddle.net/dxSma/

+0

这似乎是最准确的答案。我不知道这一点,而且,这不是我所期望的。感谢您的意见。 – Albert

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); 
    } 
} 

也许这可以给你如何让它正常工作一对夫妇的提示。

+0

它确实提供了更多信息,并且结构更好,但返回的内容看起来像一个页面。 http://jsfiddle.net/dxSma/1/为什么当所有的工作仍然需要自己完成时,它听起来很壮观? – Albert

+0

@DarkRanger我的意图不是让它听起来很壮观*,这个错误函数在ASP.NET WebServices中至少有效 - 带有正确的responseText。 – sQVe

+0

我知道这不是你的意图。我的意思是,为什么jQuery后面的开发人员会添加一个错误回调函数,并且在文档中,让它听起来像你需要的所有东西,而不是它的组成部分?这没什么反对你! :P这是更多的一百万美元的问题。 – Albert

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 
} 
}); 
+0

不会说第二部分我说的一样: 'error:function(xhr){alert(xhr.url +“找不到。”);例如? – Albert

+0

是的butyou可以输入特定的错误代码的自定义消息,所以它会更可行我想试试看,并让我知道。 –