如何捕获jQuery AJAX错误?

时间:2013-09-18 05:46:57

标签: javascript jquery ajax error-handling

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

  

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.

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

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

2 个答案:

答案 0 :(得分:9)

试试这个:

$.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));
    }
});

答案 1 :(得分:3)

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

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

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