许多失败的jquery-ajax请求正以错误的方式污染我的控制台。查看产生这些控制台错误的代码(jquery 1.7.2,第8240行)
// Do send the request
// This may raise an exception which is actually
// handled in jQuery.ajax (so no try/catch here)
xhr.send( ( s.hasContent && s.data ) || null );
我注意到这条评论解释了为什么没有try或catch。但是,即使我在我的jQuery.ajax请求中有一个显式的error回调函数,我仍然没有由jQuery.ajax处理这些错误。
如何处理jquery-ajax错误,使错误消息不会出现在控制台中?
编辑:下面是执行Ajax请求的代码片段,以及精确的错误消息(在chrome中):
$.ajax({
dataType: 'xml',
url:"./python/perfdata.xml?sid=" + (new Date()),
success: function (data) {
var protocols = $("Protocols", data).children();
parseData(protocols);
},
error: function (error) {
setTimeout(getData, 200);
}
});
下面是chrome错误消息:
GET
http://zeus/dashboard/python/perfdata.xml?sid=Thu%20May%2024%202012%2016:09:38%20GMT+0100%20(GMT%20Daylight%20Time)
jquery.js:8240
您可以发布创建Ajax请求的代码和完整的错误消息吗?
api.jquery.com/ajaxerror和api.jquery.com/jquery.ajax
您是否尝试在$.ajax调用周围添加try/catch块?我不确定这个错误是什么意思,但看起来像是在试图发出请求时发生的,我认为.ajaxError只处理响应中的错误。
这些错误可能是XML解析错误吗?
我认为这些控制台消息根本不是例外,它们只是来自失败的网络请求的通知。当你的标签引用丢失的图像时,你会得到类似的结果。我怀疑你能否压制他们。
当服务器的响应为空时,我得到了这些。想弄明白为什么……将发布更新。
@啊哈,让我们知道!
问题是我从www.example.com打开index.html,向example.com发出了$.ajax请求。我使用Firebug控制台进行请求,从basic$.post开始,然后以小步骤进行工作。
可以使用自定义函数来执行此操作
$(document).ajaxError(ajaxErrorHandler);
在那个处理程序中设置你需要做的任何事情
var ajaxErrorHandler = function () {
//do something
}
好的,我已经尝试过了,但是随后在控制台错误的基础上执行ajaxErrorHandler!
谢谢您!这真的帮助了我:)
如果要进行测试,您可以(在chrome中)通过重写函数"send"来尝试此操作:
$(function() {
var xhr = null;
if (window.XMLHttpRequest) {
xhr = window.XMLHttpRequest;
}
else if(window.ActiveXObject('Microsoft.XMLHTTP')){
// I do not know if this works
xhr = window.ActiveXObject('Microsoft.XMLHTTP');
}
var send = xhr.prototype.send;
xhr.prototype.send = function(data) {
try{
//TODO: comment the next line
console.log('pre send', data);
send.call(this, data);
//TODO: comment the next line
console.log('pos send');
}
catch(e) {
//TODO: comment the next line
console.log('err send', e);
}
};
$.ajax({
dataType: 'xml',
url:"./python/perfdata.xml?sid=" + (new Date()).getTime(),
success: function (data) {
var protocols = $("Protocols", data).children();
parseData(protocols);
},
error: function (error) {
setTimeout(getData, 200);
}
});
});
?测试
有趣的方法。
你试过了吗?
$.ajaxSetup({
timeout:10000,
beforeSend: function(xhr) {
//
},
complete:function(xhr,status) {
//
},
error: function(xhr, status, err) {
switch (status){
case 'timeout': {}
case 'parseerror': {}
case 'abort': {}
case 'error': {}
default: {}
}
}
});
我收到了500个内部服务器错误,当它指向行xhr.send( ( s.hasContent && s.data ) || null );时
但是当我检查ApacheLogs(内部服务器错误)时,错误在其他代码中是另一回事。
请也检查一下。