1

当我单击以下按钮(以及页面上的所有其他 ajax 表单)时,Firefox 正在触发两个请求:

<%= form_tag(action_object_path, :remote => true) do -%>
  <div><%= submit_tag "run process" %></div>
<% end -%>

我不想要这种行为。我拉起萤火虫,可以看到有两个请求:

POST http://localhost:3000/object/1/action    jquery.js?body=1 (line 8527)
POST http://localhost:3000/object/1/action    application.js?body=1 (line 8527)

当我点击我的按钮时,如何解决这个问题以只触发一个请求?

我记得的一件事可能有助于诊断这个问题。我知道它们都是 javascript 资产,并且可以隐约记得在我开始构建我的应用程序后立即用我的资产修改某些东西,因为我rails server咆哮并告诉我预编译(我至少认为它是预编译)我的资产。我不记得我做了什么,所以不知道如何扭转它。

我还在某处读到了 firefox 的缓存可能会导致它触发两个请求,所以我尝试清除我的缓存,但它不起作用。

谢谢

4

1 回答 1

0

为了比评论更清楚地解释这个问题:

jquery-ujsjavascript 库添加事件绑定以更改通常会生成标准 HTTP 请求(并标记为)的元素的事件到:remoteAJAX 请求中。在 Rails 中,您通常会jquery-rails安装 gem,然后以以下几种方式之一呈现 jquery_ujs.js 文件:

  • require jquery_ujs在 application.js 清单中添加一行
  • javascript_include_tag :jquery_ujs在应用程序布局文件中添加一行
  • 将文件复制jquery_ujs到您的资产并依赖 application.js 清单中的某些行将其拉入(例如require_tree .

选择这些方法中的一种以上将导致库被链接两次 - 并会导致所描述的症状。

于 2013-05-23T21:53:03.233 回答