2014-02-12 29 views
0

My Rails应用程序正在一个接一个地提交两个帖子请求。它只发生在我用jQuery手动提交的表单上。Rails提交了两次或更多的帖子请求

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

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 . 

我的Gemfile(Rails的4.0.2):

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

回答

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

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

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

我知道,它是关于那个js相关的100%问题。

+0

它没有加载两次。我非常确定这一点。 –