2011-08-09 18 views
5

私のコードは次のとおりです。jQuery Ajaxリクエストをどのようにデバッグできますか?

var test = "it isn't working"; 
var response = $.ajax({ 
    type: 'GET', 
    url: 'jquerydemo.php', //This is in the same site as the page calling this request, so it's not a same-domain error. 
    success: function(){ 
      test = "it's working"; 
     }, 
    error: function(){ 
      alert("Error detected"); 
     } 
}).responseText; 
alert(test); 

私は、ステータスコードをテストし、それが200に出てきて、誤差関数が消えることはありませんが、どちらも成功機能は行いません。私のコメントで言ったように、それは同じ起源の政策の誤りではありません。それは単に "それは働いていない"と言っています。何が起きてる?

答えて

5

あなたのajax呼び出しは非同期です。最後の警告が実行されてもまだ完了していません。成功関数に実際の警告を入れれば、結果がそこに表示されます。

ajax呼び出しを行うと、非同期ajax呼び出しが開始され、残りのコードは引き続き実行されることに注意してください。投稿したコード例では、ajax呼び出しが完了する前にすぐにalert(test)呼び出しが実行されることを意味します。

ajax呼び出しの結果は、成功ハンドラ自体からのみ調べることができます。

var test = "it isn't working"; 
var response = $.ajax({ 
    type: 'GET', 
    url: 'jquerydemo.php', //This is in the same site as the page calling this request, so it's not a same-domain error. 
    success: function(){ 
      alert("it's working"); // put this here and you will see it 
            // if the ajax call is successful 
     }, 
    error: function(){ 
      alert("Error detected"); 
     } 
}).responseText; 
+0

また、非同期 '追加するオプションがあります:あなたは' ajax'コールに渡す設定にtrue'をするが、これは、実行のスレッド全体を停止することを念頭に置いておきますあなたのスクリプトの中で、リクエストが返されるまで。 – dfreeman

+0

@SchiefGelaufen - あなたは 'async:false'を意味すると思います。 ajax呼び出しを同期呼び出しにすることは実際の選択ですが、ajax呼び出しの期間中はWebページ全体がロックされるため、ほとんど最適な設計方法とは限りません。 'async:true'でコーディングするのはもっと複雑ですが、より良いユーザーエクスペリエンスを提供します。 – jfriend00

+0

おっと、私の愚かなタイプミス。はい、 'async:false'です。同期Ajaxリクエストを作成すると、ページ全体がロックされる(少なくともいくつかの状況がありますが)ことは必ずしも真実ではありませんが、成功の際にはレスポンスに依存するロジックを置く方が良い方法と考えられます折り返し電話。 – dfreeman

0

あなたは、これは動作します.... AJAX呼び出しの成功関数に端から

1

移動することを警告(テスト)

var response = $.ajax({ 
    type: 'GET', 
    url: 'jquerydemo.php', 
    success: function(){ 
      alert("it's working"); 
     }, 
    error: function(){ 
      alert("Error detected"); 
     } 
}).responseText; 

ようにそれを行うことができます。 警告が表示されている場合は、コードが動作していることを意味します。その成功の戻り値でのみajax呼び出しをデバッグすることができます。

var test = "it isn't working"; 
var response = $.ajax({ 
    type: 'GET', 
    url: 'jquerydemo.php', 
    success: function(){ 
      test = "it's working"; 
      alert(test); //It will alert when you ajax call returns successfully. 
     }, 
    error: function(){ 
      alert("Error detected"); 
     } 
}).responseText; 

希望します。

2

これらの種類のデバッグを行うには、I find Firebugツールが不可欠です。サーバーからの応答が正確に表示されます(500エラー、553エラー、何がありますか)。 Javascriptコードにブレークポイントを入れて、それを段階的にデバッグすることができます。 FirebugはFirefoxで動作します。

IEの場合、Firebugに似ている開発ツールの機能を使用することができます。これは特にIE9の以前のバージョンよりも成熟したようです。IE7またはIE8。

+0

IEの場合、Firebug Liteもあります - http://getfirebug.com/firebuglite –

+0

ChromeのCTRL-SHIFT-Jを押すこともできます – pilavdzice

12

これを試してみてください:

error: function(jqXHR, textStatus, errorThrown) { 
     console.log(JSON.stringify(jqXHR)); 
     console.log("AJAX error: " + textStatus + ' : ' + errorThrown); 
} 
関連する問題