キャッチする方法はありますかfailed to load resource: net::ERR_CONNECTION_REFUSED
?試してみました:
try {
$.post('',{},function(res) {
}).fail(function (xhr, textStatus, errorThrown) {
xhr.textStatus = textStatus;
xhr.errorThrown = errorThrown;
console.log('fail',xhr);
// how to get the 'ERR_CONNECTION_REFUSED' or anything else as string?
});
} catch(e) {
console.log('catch',e);
}
fail 関数はキャッチできましたが、エラーに関する情報は取得できませんでした。
- ERR_NAME_NOT_RESHOLVED (エラー名が解決されませんでした)
- エラー_接続拒否
- クライアントによってブロックされました
- ERR_TUNNEL_CONNECTION_FAILED (プロキシ使用時)
または他の何か...問題は、どのようにしてそのようなエラーが発生するかということです。
ベストアンサー1
私はJavaScriptを使って目標を達成しようとしましたXMLHttpRequest()
var xhttp= new XMLHttpRequest();
try{
xhttp.onreadystatechange = function() {
console.log(xhttp);
if (xhttp.readyState == 4 && xhttp.status == 0) {
alert("Unknown Error Occured. Server response not received.");
}
};
xhttp.open("POST", "http://localhost:8080/data", true);
xhttp.send();
}catch(e){
console.log('catch', e);
}
上記のスニペットは、一般的なエラー処理のみを示していますが、エラーの正確な理由はわかりません。trytry...catch
ブロック内の関数が例外をスローしていないため、ステートメントは何もキャッチできません。XMLHttpRequest
バックグラウンド スレッドで実行されているようですが、キャッチできないため実行時エラーになります。
jQuery は実際には JavaScript であるライブラリなので、裏で使用されている$.post()
ため、同じように動作します。$.post()
XMLHttpRequest
以下は jQuery バージョンです。エラーの理由を正確に知ることはできないため、一般的なエラーも処理します。
try {
$.post('http://localhost:8080/data', {}, function(res) {}).fail(function() {
alert("Unknown Error Occured. Server response not received.");
});
} catch (e) {
console.log('catch', e);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
結論
JavaScriptはまださまざまなエラー状態を処理するのに十分効率的ではないためXMLHttpRequest()
、AJAXリクエストのネットワークエラーの背後にある正確な理由を知ることはできません。一般的なエラーと、次のような他の既知のステータスコードのみをキャプチャできます。
ファイルが見つからない場合は「404」
「500」はサーバーが応答しないことを示します
さらに詳しくはhttps://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
アップデート:この投稿を最後に更新してからかなり時間が経ちました。同様の目的を達成しようとする回答をいくつか見ましたが、それでもほとんど成功していません。このスレッドの回答のいくつかで言及されているように、XMLHttpRequest.onerror
一般的なエラーをキャッチするためにコールバック関数を使用することもできますが、まだ IE を使用している場合は機能しない可能性があります。