jQuery: catch ajax exceptions
许多失败的jquery-ajax请求正以错误的方式污染我的控制台。查看产生这些控制台错误的代码(jquery 1.7.2,第8240行)
1 2 3 4 | // 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 ); |
我注意到这条评论解释了为什么没有
如何处理jquery-ajax错误,使错误消息不会出现在控制台中?
编辑:下面是执行Ajax请求的代码片段,以及精确的错误消息(在chrome中):
1 2 3 4 5 6 7 8 9 10 11 12 | $.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错误消息:
1 2 3 | GET http://zeus/dashboard/python/perfdata.xml?sid=Thu%20May%2024%202012%2016:09:38%20GMT+0100%20(GMT%20Daylight%20Time) jquery.js:8240 |
可以使用自定义函数来执行此操作
1 | $(document).ajaxError(ajaxErrorHandler); |
在那个处理程序中设置你需要做的任何事情
1 2 3 | var ajaxErrorHandler = function () { //do something } |
如果要进行测试,您可以(在chrome中)通过重写函数"send"来尝试此操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | $(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); } }); }); |
?测试
你试过了吗?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | $.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个内部服务器错误,当它指向行
但是当我检查ApacheLogs(内部服务器错误)时,错误在其他代码中是另一回事。
请也检查一下。