jQuery 1.7 を使用した Javascript コード:
$( function() {
$.get('/ajax_dummy', function() { alert('foo'); })
});
Firebug を使用すると、HTTP GET 要求が送信され、コード 200 の「hello world」応答が返されるので、すべて問題ないように見えます。ただし、コールバックは呼び出されません。
何が悪いのかわかりません。これはとても単純なはずですよね?
jQuery 1.7 を使用した Javascript コード:
$( function() {
$.get('/ajax_dummy', function() { alert('foo'); })
});
Firebug を使用すると、HTTP GET 要求が送信され、コード 200 の「hello world」応答が返されるので、すべて問題ないように見えます。ただし、コールバックは呼び出されません。
何が悪いのかわかりません。これはとても単純なはずですよね?
あなたは提供していないので、jQueryは、あなたが言った応答ヘッダーdataType
からコンテンツタイプが何であるかを「インテリジェントに推測」します.Content-Type
application/json
そのため、jQuery は応答を JSON として扱います。つまり、JSON として自動的に解析しようとするため、エラーが発生します。
リクエストがエラーになるため
$.parseJSON( "hello world" );
"Invalid JSON: hello world"
成功のコールバックは明らかに発生しません。
これを裂いてください:
$.ajax("/ajax_dummy", {
dataType: "text",
success: function() {
console.log("winning.");
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(textStatus); //error logging
}
});
これは、ドキュメントによると、 $.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"); });
このマークアップを追加
<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
});