2017-02-20 8 views
0

を取得するために失敗したときに、私は、私はURLが理由有効期限が切れたトークンのいずれであってもよく、適切にJSONを読み込むことができませんでしたときに、ダイアログボックスをポップアップ表示しようとしています、JavaScriptでAjaxコードの下に働いているに達していない失敗どのような場合でも、コードがエラーになるか、失敗すると予想していますが、それは起こっていません。 URLでJSONが正常に読み込まれると、正常終了ブロックと完全ブロックが正常にヒットしていますが、URLに失敗するとヒットすることはありません。私はasync: falseを使用しようとブール変数weHaveSuccessに確認しようとしましたが、コードの最後の行にあるconsole.log(weHaveSuccess);は、成功/エラーが実行中であっても前に実行してきているし、それはその、まだ非同期に読み込むように私には思われています。 URLからのJSONロードが失敗したときにエラーブロックがヒットしない理由を知りたいです。事前にエラーやAjaxはJSON

私のコード

function checkUser(myURL, newAccessToken, weHaveSuccess) { 

    $.ajax({ 

     type: "GET", 

     dataType: "jsonp", 

     async: false, 

     url: myURL + newAccessToken, 

     error: function (XMLHttpRequest, textStatus, errorThrown) { 
      console.log("Status: " + textStatus); 
      console.log("Error: " + errorThrown); 
     }, 

     success: function (data) { 

      console.log("Hello 2 " + JSON.stringify(data)); 

      weHaveSuccess = true; 

      console.log('Message from Success ' + weHaveSuccess); 

     }, 

     complete: function() { 
      console.log('Message from Complete ' + weHaveSuccess); 
     } 

    }).done(function (data) { 
     alert("Success"); 
     console.log(data); 
    }).fail(function (data) { 
     console.log(data); 
     alert("Failed"); 
    }).always(function() { 
     alert("In Always"); 
    }); 

    console.log(weHaveSuccess); 
} 

ありがとう!

+0

をなぜあなたは "「エラー」を扱うとされています – ADyson

+1

これを試してみて、すべての右のハンドラに当たった:https://jsfiddle.net/1rLqcLkb/ 2つの警告が表示される「失敗」と「常にでは」、およびコンソールで、私は「ステータス」とfail' 'からのデータオブジェクトに続く「エラー」の行を取得。 –

+0

当初、私はちょうど成功/エラーを使用して、それをD以来ました私は終わった/失敗して周り遊んでいたidn't仕事。 –

答えて

0

AJAX要求は非同期です。リモートリクエストを作成して応答するには時間がかかります。あなたはsuccess関数内で自分のポスト応答コードを記述するかコールが開始された場合と同じ範囲内で、そこから別の関数を呼び出す必要があります。

私はあなたのサーバが失敗した場合に返すかについて、ここで推測のビットを取っています。 AJAXリクエストの成功は、単にデータの内容を考慮せずに200 OK応答が受信されたことを意味します。エラーは単にあなたがエラーを表示するには、次のいずれかを実行しなければなりませんデータの変化である場合:

  1. は、おそらく400 Bad Request、失敗した場合にstatus codeヘッダを設定し、サーバーを持っています。
  2. success機能では、dataの中で、あなたが期待しているエラー応答を探して、alert()をトリガーします。まず最初に、すべてのconsole.log(weHaveSuccess);火災の
0

、にconsole.logはそうアヤックスがトリガされるものではなく、とき終了約束を返しますが、ブラウザはスクリプトを継続する一方$.ajax()が非同期であるため。 jQueryのAjaxのドキュメントで は言う:

Cross-domain requests and dataType: "jsonp" requests do not support synchronous operation.

それは多分あなたはネットワークまたはURLからいくつかの情報を追加することができ、応答を見ずにデバッグするのは難しいですか?

+0

確かに....例えば 'url:" https://api.id.me/api/public/v2/attributes.json?access_token= "+ 10576c9012b248f782529d408ef49d54"であれば、成功もエラーにも達していません。ありがとう! –

0

方法について次しようとした場合: jsonpは応答を処理し、そこにconsole.logれるコールバックのためにあなたの$.ajax()機能に設定を追加:

function myCallback(data) { 
    console.log(data); 
} 

$.ajax({ 
    type: "GET", 
    dataType: "jsonp", 
    jsonp: myCallback, 
... 
+0

'url:" https://api.id.me/api/public/v2/attributes.json?access_toke n = "+ 10576c9012b248f782529d408ef49d54'で試しましたが、コールバック関数が呼び出されません。返信いただきありがとうございます。 –