ajax catch,jQuery:捕获ajax异常

许多失败的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解析错误吗?

我认为这些控制台消息根本不是例外,它们只是来自失败的网络请求的通知。当你的10740225标签引用丢失的图像时,你会得到类似的结果。我怀疑你能否压制他们。

当服务器的响应为空时,我得到了这些。想弄明白为什么……将发布更新。

@啊哈,让我们知道!

问题是我从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(内部服务器错误)时,错误在其他代码中是另一回事。

请也检查一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值