web-dev-qa-db-ja.com

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);
}

失敗関数はキャッチできますが、エラーに関する情報が得られませんでした。

  • ERR_NAME_NOT_RESOLVED
  • ERR_CONNECTION_REFUSED
  • ERR_BLOCKED_BY_CLIENT
  • ERR_TUNNEL_CONNECTION_FAILED(プロキシを使用する場合)

または何か他の..質問は、エラーの種類を取得する方法ですか?

43
Kokizzu

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);
}_

上記のスニペットは一般的なエラー処理のみを提供しますが、エラーの背後にある正確な理由はわかりません。 _try...catch_ステートメントは、tryブロック内のどの関数も例外をスローしていないため、何もキャッチできません。バックグラウンドスレッドでXMLHttpRequestが実行されているように見えるため、そのランタイムエラーはキャッチできません。

JQueryは実際にはJavaScriptであるライブラリであるため、$.post()もカーテンの後ろでXMLHttpRequestを使用しているため、$.post()でも同じように動作します。

以下は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 から知ることができます。

14
Kiran Shakya
var xhttp= new XMLHttpRequest();
xhttp.onreadystatechange = function() {
console.log(xhttp);

xhttp.onerror = function(e){
    alert("Unknown Error Occured. Server response not received.");
};

xhttp.open("POST", "http://localhost:8080/data", true);
xhttp.send();

後で理解しやすいエラーを取得する別の方法は、onerrorイベントハンドラです。私が見たものから、それはキランのソリューションよりも有用な情報を提供しません。

5
Daniel Vestøl

Chromeでオンライン/オフラインにアクセスできます。

var _Network_state = true;
    function updateIndicator() {
        // Show a different icon based on offline/online
        if (navigator.onLine) { // true|false
            // ... do other stuff
            _Network_state = true;
        } else {
            // ... do other stuff
            _Network_state = false;
        }
        console.info(_Network_state ? 'Online' : 'Offline');
    }
    // Update the online status icon based on connectivity
    window.addEventListener('online',  updateIndicator);
    window.addEventListener('offline', updateIndicator);
    updateIndicator();

Ajaxを呼び出す前に、「_ Network_state」を調べます

0
Ariel Garcia