2012-01-30 154 views
0

我最初需要設置ajax beforeSend以包含所有ajax post請求的csrf meta標記(會話正在重置,很痛苦等)。這使得發佈的請求工作正常。然而,這似乎是應該在最新版本的jquery-rails中考慮到的事情。當我升級時,我覺得我錯過了一些東西...是的,我在我的佈局中包含csrf meta標籤。將rails 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

是什麼在你的application.js?你正在加載jquery和jquery_ujs? – 2012-01-30 17:25:08

+0

更新與application.js的問題 – Danny 2012-01-30 18:13:55

回答

2

需要jquery_ujs的數據屬性的方法創建的軌道實際使用。假設你在你的應用程序中的jquery_ujs寶石,增加

//= require jquery_ujs 

要的application.js(jQuery是加載後)應該解決的事情

+1

這樣做的伎倆,謝謝! – Danny 2012-01-30 20:21:59