12

jQuery 1.7 を使用した Javascript コード:

$( function() { 
  $.get('/ajax_dummy', function() { alert('foo');  })
});

Firebug を使用すると、HTTP GET 要求が送信され、コード 200 の「hello world」応答が返されるので、すべて問題ないように見えます。ただし、コールバックは呼び出されません。

何が悪いのかわかりません。これはとても単純なはずですよね?

4

4 に答える 4

11

あなたは提供していないので、jQueryは、あなたが言った応答ヘッダーdataTypeからコンテンツタイプが何であるかを「インテリジェントに推測」します.Content-Typeapplication/json

そのため、jQuery は応答を JSON として扱います。つまり、JSON として自動的に解析しようとするため、エラーが発生します。

リクエストがエラーになるため

$.parseJSON( "hello world" );
"Invalid JSON: hello world"

成功のコールバックは明らかに発生しません。

于 2011-12-14T18:49:52.503 に答える
6

これを裂いてください:

$.ajax("/ajax_dummy", {
    dataType: "text",
    success: function() {
        console.log("winning.");
    },
    error: function(jqXHR, textStatus, errorThrown) {
        console.log(textStatus); //error logging
    }
});
于 2011-12-14T18:23:54.467 に答える
0

これは、ドキュメントによると、 $.get() 構文は次のようにする必要があるためです

jQuery.get( url [, data] [, success(data, textStatus, jqXHR)] [, dataType] )

" success " コールバック オプションに注意してください。ステータス コード (200) に基づいてリクエストが成功した場合に呼び出される成功のコールバック。ただし、URL が有効なパスではないか、「ファイルが見つかりません」を意味する他のステータス コード (404) を返し、エラーが発生する可能性があります。そのため、成功メソッドは呼び出されませんでした。

また、構文で定義された「エラー」コールバックもありません。次のより完全なコードを確認してください

$.get("/ajax_dummy", function() { alert('foo'); })
  .error(function(d,e) { alert(e); })
  .complete(function() { alert("complete"); });
于 2011-12-14T19:47:40.193 に答える
0

このマークアップを追加

<div id="error"></div>

次に、このハンドラーを追加して AJAX エラーをキャッチします

$("#error").ajaxError(function(event, request, settings){
  $(this).append("<li>Error requesting page " + settings.url + "</li>");
});

または、元のコードを次のように書き直すこともできます

$.get('/ajax_dummy', function() { 
    alert('foo');  
}).error(function() {
    // catch error
});
于 2011-12-14T18:17:47.523 に答える