2009-07-31 10 views
1

私はこれをRailsアプリケーションで使用しています。私はjavascriptに応答の種類を変更するいくつかのコードがあります。初心者:jQuery.ajaxSetup 'beforeSend'とは何ですか?

jQuery.ajaxSetup({ 
    'beforeSend': function(xhr) { 
     xhr.setRequestHeader("Accept", "text/javascript") 
    } 
}) 

フォームを提出するとき、これは正常に動作しますが、(コードはRailsのHTMLの応答を通過し続けて)リンクをクリックしてAJAXによって生成されたjavascriptのフォームを送信したときに呼び出されていないようです。

おそらく単純な修正です。何か案は?

答えて

0

「AJAXによって生成されたjavascriptフォーム」の意味がわかりません - DOMでフォームを生成してからjavascriptをクリックして(JavaScript経由で)ボタン?そうであれば、それはAJAX経由ではなく、通常の投稿として送信されます。 beforeSendハンドラは、フォームがAJAXを介して送信されるときにのみ呼び出されます。あなたのセットアップコールは、javascriptが返されるようにAcceptヘッダーを設定する既定のbeforeSend関数を追加していますが、AJAX経由で送信された要求に対してのみ行います。これではJavaScriptが作成したフォームおよび提出(非AJAX)である

$.ajax({ 
    url: '/controller/action', 
    type: 'post', 
    dataType: 'json', 
    data: $('form').serialize(), // this gets the form data 
    success: function() { 
    }, 
    ... 
}); 

これはAJAXの提出は、次のようになります。

$('<form><input type="hidden" name="inp" value="somedata" /></form>') 
    .appendTo(document.body) 
    .submit(); 

か(ボタンのクリックを経由して)

$('form #submitButton').click(function() { 
    $('form').submit() 
}); 
3

あなたがRailsのrespond_to ...フォーマット・ブロックを使用したい場合はXHRヘッダの設定はjQueryを使って必要とされます。プロトタイプはデフォルトでこれを設定しますが、text/javascriptがacceptヘッダーにあるときにformat.jsオプションが実行されるため、JQueryで手動で設定する必要があります。

あなたのAJAXリクエストは実際に発砲していますか?おそらく、ハンドラが接続されておらず、リンクが通常のHTTP GETを送信していますか?