web-dev-qa-db-ja.com

jQuery AJAXエラーをキャッチするにはどうすればよいですか?

AJAXリクエストがサイトに送信されると、サーバー側のエラーはjQuery promiseアプローチで簡単に処理されます。.done().fail()など。ただし、一部のリクエスト(無効なサイトやクロスオリジンリクエストを受け入れないサイトなど)では、呼び出しが行われるとすぐに例外が発生します。コンソールのエラーの例を次に示します。

XMLHttpRequestはhttp://someotherserver/api/blahblahをロードできません。 Origin http://localhost:52625はAccess-Control-Allow-Originでは許可されていません。

はい、私はCORSについて知っています...それは問題ではありません。私が実際にやっているのは、サーバーのIP /名前が正しいかどうかをテストするためにWeb API呼び出しを試みることです

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ブロックでラップすることは理にかなっているように見えますが、それは役に立たないようです。

この質問 が見つかりましたが、解決策にはjQueryコードのハッキングが含まれます。確かに、これらのエラーをキャッチし、コンソールログを詰まらせないためのより良い方法がありますか?

21
AR.

これを試して:

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

Google ChromeでWeb開発者コンソールを使用できます。 F12を押します。応答を確認するには[ネットワーク]タブを使用し、JavaSvriptとjQueryおよびAjaxのエラーには[コンソール]タブを使用できます。 :)

あなたのajax関数に追加してこれを試してください:

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