2011-12-14 4 views
10

Javascriptコードと呼ばれることはありません:jQueryのAjaxのコールバックは、jQueryの1.7を使用して、

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

Firebugので、私は、HTTP GETリクエストが送信され、「Hello World」のコード200で応答が返されるので、すべてのものはそうあることがわかります良い。しかし、コールバックは決して呼び出されません。

私は何が間違っているのか分かりません。これはとてもシンプルなはずですよね?

+7

'$ .get()'は自動的に失敗します。 '$ .ajax()'を 'error'メソッドとともに使用して、代わりに実行されるかどうか確認してください。もしそうなら、与えられた議論を見て、何がうまくいかないか見てみましょう。 – JAAulde

+1

ajaxハンドラからどのようなコンテンツが戻ってきますか?それがJSONで、レスポンスがJSONの形式を誤っていると、なぜあなたに明確な理由がなくても失敗する可能性があります。 –

+0

一見して、 ';' get文の最後に? – brheal

答えて

8

dataTypeを提供していないので、jQueryは、コンテンツタイプがapplication/jsonと回答したContent-Typeヘッダーから「インテリジェントな推測」を行うようにしています。

したがって、jQueryはレスポンスをJSONとして扱います。つまり、自動的に解析してエラーを引き起こします。

要求がエラー

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

の原因となるので、成功コールバックが明らかに解雇されることはありません。

0

このマークアップ

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

を追加するには、あなたはこの裂け目を与えるこの

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

のようなあなたの元のコードを書き換えることができ、

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

またAJAXエラーをキャッチするために、このハンドラを追加します:

$.ajax("/ajax_dummy", { 
    dataType: "text", 
    success: function() { 
     console.log("winning."); 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
     console.log(textStatus); //error logging 
    } 
}); 
0

これはマニュアルに従って$のに.get()構文は、この

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

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

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

$.get("/ajax_dummy", function() { alert('foo'); }) 
    .error(function(d,e) { alert(e); }) 
    .complete(function() { alert("complete"); }); 
関連する問題