2016-08-25 9 views
1

postリクエスト中にエラーをキャッチする方法はjavascriptでですか? readyState == 4はリクエストが完了したことを意味し、status==200はリクエストが成功した場合は意味します。ポストリクエストが失敗したときにインターネット接続に失敗したとか、値が間違っているというメッセージが表示されます。ときにそのjavascript投稿/取得要求読み取りキャッチエラー

var xhttp = new XMLHttpRequest(); 
    xhttp.open("POST", url, true); 
    xhttp.setRequestHeader("Content-type", "application/json"); 
    xhttp.onreadystatechange = function() { 
     if (xhttp.readyState == 4 && xhttp.status == 200) { 
      // document.getElementById("demo").innerHTML = xhttp.responseText; 
      hideToolbar(); 
      console.log('Saving successful.'); 
     } else if(xhttp.status == "failed"){ 
      console.log('Sorry there is a problem.'); 
     } 
    }; 
    var data = JSON.stringify({ 
     "name":"name", 
     "definition":diagramData 
    }); 
    xhttp.send(data); 
+0

あなたはエラー処理のための他のステータスコードとreadystatesをチェック、または[AjaxリクエストがJavaScriptで失敗したかどうかを検出]のtry/catchブロック –

+1

可能な複製を実行することができます( http://stackoverflow.com/questions/22925803/detect-if-ajax-request-had-failed-in-javascript) –

+0

あなたが '.onload'を聞いているなら、あなたがreadyState – maioman

答えて

0

まず第一に、モーダルは大丈夫働いている

現在、私はこのような何かを持っている、あなたは応答が得ているときに、これが唯一のトリガーxhttp.onreadystatechange = function(...でこれをラップしたいと思います。たぶん、コードの途中でコードを削除しても、それでも言及しておくとよいでしょう。

ステータスが200以外の場合は、キャッチオールを行うのは大したことではありません。サーバーが201,202を送信しても問題なく動作することがあります。私はあなたのelseステートメントをelse ifに変更し、エラーについてはif(xhttp.status >= 400)を明示的にチェックすると言います。

しかし、私は 'ちょうどjQueryを使う人'であることは嫌いですが、あなたはすでにそれを使っています。 jQueryはAJAX呼び出しを大幅に簡素化し、結果の組み込みの約束を提供します。あなたはこのように上記の達成可能性:

$.post('http://my-url.com', {my: 'data'}).done(function(response) { 
    hideToolbar(); 
    $("#myModal").modal(); 
    }) 
    .error(function(error) { 
    console.log('did not work because of', error)}); 
+0

$( "#modal")は使用されません。このリクエストではvanilla jsに滞在したいと考えています。 – nCore

関連する問題