27

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

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

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

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

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

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

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

4

2 回答 2

14

尝试这个:

$.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));
    }
});
于 2013-09-18T06:13:27.143 回答
2

You can use web developer console in google chrome. Press F12. And use Networks tab for checking response, And for JavaSvript and jQuery and Ajax errors you can use Console tab. :)

Try this by adding to your ajax function :

error: function(XMLHttpRequest, textStatus, errorThrown) {
 alert(errorThrown);
于 2013-09-18T06:08:46.647 回答