【问题标题】:upgrading rails 3 to 3.1 - ajax requests not working将 rails 3 升级到 3.1 - ajax 请求不起作用
【发布时间】: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&amp;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


【解决方案1】:

您需要 jquery_ujs 才能实际使用 rails 创建的数据方法属性。假设您的应用中有 jquery_ujs gem,添加

//= require jquery_ujs

到 application.js(加载 jquery 后)应该修复一些问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多