2017-07-18 11 views
0

HTTP ajax呼び出しでネットワーク関連の問題を処理しようとしました。だから、私は一時的にIISでそれぞれのAPIのサービスを停止し、シャットダウンされたAPI - http://localhost:1000/GetDataを呼び出そうとしました。

fetch("http://localhost:1000/GetData") 
    .then(handleErrors) 
    .then(function(response) { 
     return response.Json(); 
    }).catch(function(error) { 
     console.log(error); 
    }); 

私は

すぎ
fetch("http://localhost:1000/GetData") 
.then(response => { 
     if(response) { 
      if (response.status === 200) { 
      alert('Super'); 
      return response.json(); 
      } else { 
      alert('Hai'); 
      return ''; 
      } 
     } else { 
      alert('Oooops'); 
      return ''; 
     } 
     }) 
.catch(function(error) { 
      console.log(error); 
     }); 

を次のコードを試してみました。しかしそのは失敗し、直接任意のalertをトリガし、そのエラーをスローせずにcatchブロックを打ちます。さらにresponse.json();はSuccessブロックにありますが、その実行方法はわかりません。

TypeError: response.json is not a function 
Stack trace: 
onFetchError/<@http://192.168.4.159:3000/app.0df2d27323cbbeada2cd.js:9946:13 

親切にどのステータスコードをチェックする方法と、ネットワークエラーを処理するために(など、404つまり、ネットワークが利用できない、)

呼ばウェブサイト私を助ける:this issue on Githubに基づいてhttps://www.tjvantoll.com/2015/09/13/fetch-and-errors/

+1

これらのif文の前にコンソールログに記録しましたか? –

+1

https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch apiは 'response.status'を表示せず、' response.ok'を表示します。 .statusはXMLHttpRequestオブジェクトのようなものです –

+1

ああ、これはまったくjQuery関連ではない、フェッチはネイティブJSの実験的なXHR関数 –

答えて

0

、代わりにcatchブロックでエラータイプを識別することができます。したがって、このようなものがあなたのケースでうまくいくかもしれません:

fetch("http://localhost:1000/GetData") 
    .then(response => { 
    alert("Super"); 
    return response.json(); 
    }) 
    .catch(err => { 
    const errStatus = err.response ? err.response.status : 500; 
    if (errStatus === 404){ 
     // do something 
    } else { 
     // do another thing 
    } 
    }); 
+1

その失敗...現在、それは応答を返さない 'HTTP OPTIONS'をトリガーします要求元のサーバーがオフラインの場合は、ブラウザーに戻ります。私は私の質問に詳細を掲載しましたhttps://stackoverflow.com/questions/45182002/handling-of-failure-status-in-http-options-ajax-call –

関連する問題