我的Rails应用程序一个接一个地立即提交两个帖子请求。它只发生在我用jQuery手动提交的表单上。
如果我导航到另一个页面,只有一个并尝试再次提交表单,则只提交一个请求。当我向后导航时, 3 请求会被提交。对于每个向前导航,然后返回,添加一个请求。
以下是我提交表单的方式。
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'
答案 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%问题。