我最初需要設置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&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" />
是什麼在你的application.js?你正在加載jquery和jquery_ujs? – 2012-01-30 17:25:08
更新與application.js的問題 – Danny 2012-01-30 18:13:55