Rails提交两次或更多的帖子请求

时间:2014-02-12 11:34:43

标签: jquery ruby-on-rails ajax ujs turbolinks

我的Rails应用程序一个接一个地立即提交两个帖子请求。它只发生在我用jQuery手动提交的表单上。

如果我导航到另一个页面,只有一个并尝试再次提交表单,则只提交一个请求。当我向后导航时, 3 请求会被提交。对于每个向前导航,然后返回,添加一个请求。

Console output

以下是我提交表单的方式。

jQuery(document).on "ready page:change", ->
  $('body').on 'click', '[data-behaviour="submit-on-check"]', ->
    $(@).closest('form').submit()

以下是表格:

= form_for task, url: complete_task_path(task) , remote: true do |f|
  = f.check_box :complete, class: 'complete', data: { behaviour: 'submit-on-check' }

我的清单。

//= require jquery
//= require jquery.ui.effect-highlight
//= require jquery_ujs
//= require turbolinks
//= require_tree .

My Gemfile(Rails 4.0.2):

gem 'jquery-rails'
gem 'turbolinks'
gem 'jquery-ui-rails'

2 个答案:

答案 0 :(得分:1)

当您使用Turbolinks时,页面实例在您从一个页面导航到另一个页面时不会更改。我想结果是,每次触发page:change事件时,都会使用$('body').on绑定一个新的处理程序/闭包。由于先前的处理程序仍然绑定到DOM,因此将执行闭包的多个实例。

您可以尝试在再次应用之前取消绑定事件,或者在相应的闭包范围内使用变量以确保处理程序仅应用一次。

bound = false
jQuery(document).on "ready page:change", ->
  unless bound
    $('body').on 'click', '[data-behaviour="submit-on-check"]', ->
      $(@).closest('form').submit()
    bound = true

答案 1 :(得分:-1)

可能是您的应用程序或JavaScript文件夹中有两次jquery_ujs。

确保不应加载两次尝试按页面来源检查。

我知道,这是关于js相关的100%问题。