【问题标题】:Rails is submiting a post request twice or moreRails 提交了两次或更多次的 post 请求
【发布时间】:2014-02-12 11:34:43
【问题描述】:

我的 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 .

我的 Gemfile(Rails 4.0.2):

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

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 它没有加载两次。我很确定。
      猜你喜欢
      • 2011-12-05
      • 2023-04-03
      • 1970-01-01
      • 2018-12-23
      • 2017-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多