【发布时间】:2012-01-30 16:55:04
【问题描述】:
我最初需要设置 ajax beforeSend 以包含所有 ajax 发布请求的 csrf 元标记(会话正在重置,非常痛苦等)。这使发布请求工作正常。然而,这似乎应该在最新版本的 jquery-rails 中得到解决。我觉得升级时错过了一些东西……是的,我在布局中包含了 csrf 元标记。
现在我的问题是 link_to :remote。我的链接正在生成正确的 html:
<%=link_to( "important", "/questions/importance?qid=#{q.id}&imp=up",
:method=>"post",:remote=>true)%>
生成:
<a rel="nofollow" data-remote="true" data-method="post"
href="/questions/importance?qid=30&imp=up">important</a>
但是,当单击请求时,请求是 GET 请求,而不是 xhr 请求/不使用我的 js 处理程序。这在从 3.0.7 升级到 3.1.3 之前运行良好
生成的请求:
Started GET "/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"}
这是我布局的相关部分:
<%= 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>
对此有任何见解吗?升级时我错过了什么吗?
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 吗?
-
用 application.js 更新问题
标签: ruby-on-rails ajax jquery asset-pipeline