net::ERR_CONNECTION_REFUSED をキャッチする方法 質問する

net::ERR_CONNECTION_REFUSED をキャッチする方法 質問する

キャッチする方法はありますか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 を使用している場合は機能しない可能性があります。

おすすめ記事