我怎样才能捕获jQuery AJAX错误?

将AJAX请求提交到站点时,可以使用jQuery promise方法轻松处理服务器端错误。 .done() .fail()等。但是对于某些请求(例如,对于无效站点或不接受跨源请求的站点),在进行调用时会立即发生exception。 以下是控制台中一个错误的示例:

XMLHttpRequest无法加载http://someotherserver/api/blahblah 。 Access-Control-Allow-Origin不允许使用原始http://localhost:52625

是的,我知道CORS ……这不是问题。 我实际上在做的是尝试使用web api调用来测试服务器IP /名称是否正确

我知道jQuery请求语法中的error选项:

 $.ajax({ url: remoteURL, type: 'GET', error: function (err) { console.log("AJAX error in request: " + JSON.stringify(err, null, 2)); } }).etc.etc. 

此处处理错误,但仍在控制台中记录exception。 将上面的内容包装在try-catch块中似乎是合理的,但这似乎没有帮助。

我发现了这个问题 ,但解决方案涉及破解jQuery代码。 当然有更好的方法来捕获这些错误,而不是堵塞控制台日志?

试试这个:

 $.ajax({ url: remoteURL, type: 'GET', error: function (err) { console.log("AJAX error in request: " + JSON.stringify(err, null, 2)); } }).always(function(jqXHR, textStatus) { if (textStatus != "success") { alert("Error: " + jqXHR.statusText); } }); 

XHR听众:

 $.ajax({ url: remoteURL, type: 'GET', xhr: function(){ var xhr = new window.XMLHttpRequest(); xhr.addEventListener("error", function(evt){ alert("an error occured"); }, false); xhr.addEventListener("abort", function(){ alert("cancelled"); }, false); return xhr; }, error: function (err) { console.log("AJAX error in request: " + JSON.stringify(err, null, 2)); } }); 

您可以在Google Chrome中使用Web开发者控制台。 按F12。 并使用Networks选项卡检查响应,对于JavaSvript和jQuery和Ajax错误,您可以使用Console选项卡。 🙂

通过添加到您的ajax函数来尝试这个:

 error: function(XMLHttpRequest, textStatus, errorThrown) { alert(errorThrown);