【问题标题】:Rails Ajax form submits twiceRails Ajax 表单提交两次
【发布时间】:2014-01-08 20:59:47
【问题描述】:

我有一个通过 ajax 呈现的表单。该表单还使用 ajax 提交。提交表单时,它会执行两次发布请求。

当有人点击“创建个人资料”链接时,表单会通过链接旁边的 ajax 呈现。显示表单时,我需要在视图文件的开头包含一些 javascript,因为表单需要这些 js 文件。这是表格:

<%= javascript_include_tag "/assets/temp_js/jquery-1.8.3.min.js" %>
<%= javascript_include_tag "/assets/jquery_ujs.js" %>
<%= javascript_include_tag "/assets/temp_js/jquery.jscrollpane.min.js" %>
<%= javascript_include_tag "/assets/temp_js/jquery.c2selectbox.js" %>
<%= javascript_include_tag "/assets/temp_js/jquery.colorbox-min.js" %>
<%= javascript_include_tag "/assets/temp_js/functions.js" %>

<%= form_for @profile, :html => { :class => "clearfix" }, remote: true do |f| %>
    <%= f.text_area :description, :title => "Describe yourself and what you do." %>
    <%= f.file_field :pic, :class => "field file-field", :id => "file" %>
<%= f.submit "SAVE" %>

这些文件已经在 application.html.erb 文件中加载到页面上,但是在显示表单时需要再次加载它们,因为表单中的元素需要 javascript。唯一的问题是两个顶级 javascript 文件由于某种原因导致表单发布两次。我无法摆脱它们,因为表单需要它们,但表单与它们一起提交了两次。有谁知道如何解决这个问题?

我看到一些堆栈溢出页面说我应该删除资产文件夹中的 js 文件,但我需要它们用于表单。我还读过将“config.serve_static_assets = false”添加到 development.rb 将解决问题,但它没有。

提前致谢。

更新:

问题肯定与 jquery_ujs.js 文件有关。如果我从上面的表单代码中删除它,它不会执行两次。

【问题讨论】:

  • 您可以尝试不发送文件吗?在您的 html 中缺少多种形式吗?据我所知,您需要它来传输文件。
  • 谢谢,试过了,但没有解决。另外,当我测试它并通过表单时,我没有提交图片。
  • 您对表单提交还有其他绑定吗?使用浏览器控制台。
  • 我在 Firefox 的控制台中。如何检查某些内容是否绑定到表单提交?
  • 最简单的方法是首先禁用除 jquery 和 jquery_ujs 之外的其他库

标签: javascript ruby-on-rails ajax jquery asset-pipeline


【解决方案1】:

如果有人对此有疑问,请查看您的布局文件。如果它有多个 &lt;%= javascript_include_tag "application" %&gt; 标签实例 您将获得双重提交操作。

【讨论】:

    【解决方案2】:

    如果您正在使用资产管道,您可能包括application.js,它已经包含了您需要执行远程表单的所有脚本。

    您将在显式 &lt;%= javascript_include_tag "/assets/jquery_ujs.js" %&gt; 中包含第二个副本,因此所有事件处理程序都被绑定了两次。

    【讨论】:

      【解决方案3】:

      我想出了一个 hacky 方法来做到这一点,但我不确定这是否危险。本质上,我制作了 jquery_ujs 文件的副本,其中令人不安的部分被注释掉了。主页仍然调用原始 jquery_ujs 文件,但是当使用 ajax 呈现表单时,会调用副本。如果您查看 query_ujs 源代码,我将以下所有内容都注释掉了:

      // Submits "remote" forms and links with ajax
      

      这很危险吗?我是一名 ruby​​ on rails 人,所以我第二次猜测自己与 javascript 和资产管道相关的事情。我不认为这是最好的答案,所以另一个答案可能仍会被标记为正确。

      【讨论】:

        【解决方案4】:

        就我而言,我从 application.js 中删除了 //= require jquery_ujs,因为我已经有了 //= require rails-ujs。 这解决了我的问题。

        【讨论】:

          猜你喜欢
          • 2011-06-17
          • 2015-04-04
          • 1970-01-01
          • 2013-12-10
          • 2013-05-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-29
          相关资源
          最近更新 更多