2012-01-30 11 views
0

元々、ajax beforeSendを設定して、すべてのAjax投稿リクエスト(セッションがリセットされている、大きな痛みなど)にcsrfメタタグを含める必要がありました。これはポストリクエストがうまく動作しています。しかし、これはjquery-railsの最新バージョンで扱われていたはずのもののようです。アップグレードしたときに何かが見逃されたような気がします...そして、はい、レイアウトにcsrfメタタグを含めています。レール3を3.1にアップグレードする - ajaxリクエストが機能しない

私の問題は、link_to:remoteです。私のリンクは正しいHTMLを生成している:

<%=link_to("important", "https://stackoverflow.com/questions/importance?qid=#{q.id}&imp=up", 
:method=>"post",:remote=>true)%> 

を生成します。

<a rel="nofollow" data-remote="true" data-method="post" 
href="https://stackoverflow.com/questions/importance?qid=30&amp;imp=up">important</a> 

をただし、クリックした場合、要求がGET要求であるとXHRリクエストではありません/私のjsハンドラを使用していません。ここで

Started GET "https://stackoverflow.com/questions/importance?qid=30&imp=up" for 127.0.0.1 at 2012-01-30 11:41:36 -0500 
Creating scope :page. Overwriting existing method Question.page. 
    Processing by QuestionsController#importance as HTML 
    Parameters: {"qid"=>"30", "imp"=>"up"} 

私のレイアウトの一部のrelaventです::このに

<%= javascript_include_tag 'application' %> 
    <%= csrf_meta_tag %> 
    <%= yield :javascript %> 
    <script type="text/javascript"> 
    $(document).ajaxSend(function(e, xhr, options) { 
     var token = $("meta[name='csrf-token']").attr("content"); 
     xhr.setRequestHeader("X-CSRF-Token", token); 
    }); 
    </script> 

任意の洞察力をこれが生成される3.0.7

リクエストから3.1.3にアップグレードする前に、正常に動作したのですか?アップグレードするときに何か迷っていましたか?

application.js:(ページのソースを経由して)が含まれている

//= require jquery 
//= require jquery-ui 
//= require jquery.purr 
//= require best_in_place 
//= require fancybox 
//= require_tree . 

JavaScriptファイル:

<script src="/assets/jquery.js?body=1" type="text/javascript"></script> 
<script src="/assets/jquery-ui.js?body=1" type="text/javascript"></script> 
<script src="/assets/jquery.purr.js?body=1" type="text/javascript"></script> 
<script src="/assets/best_in_place.js?body=1" type="text/javascript"></script> 
<script src="/assets/jquery.fancybox.js?body=1" type="text/javascript"></script> 
<script src="/assets/fancybox.js?body=1" type="text/javascript"></script> 
<script src="/assets/autocomplete-rails.js?body=1" type="text/javascript"></script> 
<script src="/assets/bootstrap-alert.js?body=1" type="text/javascript"></script> 
<script src="/assets/jquery.fancybox-1.3.4.pack.js?body=1" type="text/javascript"></script> 
<script src="/assets/jquery.validate.min.js?body=1" type="text/javascript"></script> 
<script src="/assets/validators.js?body=1" type="text/javascript"></script> 
<script src="/assets/application.js?body=1" type="text/javascript"></script> 
     <meta content="authenticity_token" name="csrf-param" /> 
<meta content="26P9UWaXFsZBE6jfjkQv00GgS+7+XmOOPxlh55liz4Q=" name="csrf-token" /> 
+0

を修正する必要がありますか? jqueryとjquery_ujsをロードしていますか? –

+0

application.jsで質問を更新してください – Danny

答えて

2

あなたは、データ・メソッドのjquery_ujsを必要とレールが実際に使用されるように作成されます属性。 (jqueryのがロードされた後)application.jsに

//= require jquery_ujs 

を追加し、アプリ内jquery_ujs宝石を持っていると仮定すると、あなたのapplication.jsには何の事

+1

これはトリックでした、ありがとう! – Danny

関連する問題