我正在测试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
我是否理解文档错误或我是不是做得不对?
答案 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
}
});