关于javascript:如何捕获jquery-ajax错误?

How can I catch jQuery AJAX errors?

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

XMLHttpRequest cannot load http://someotherserver/api/blahblah. Origin
http://localhost:52625 is not allowed by Access-Control-Allow-Origin.

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

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

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

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

我发现了这个问题,但解决方案包括破解jquery代码。确实有更好的方法来捕获这些错误,而不是阻塞控制台日志??


试试这个:

1
2
3
4
5
6
7
8
9
10
11
$.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听众:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$.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函数中添加以下内容:

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