Rails 4:有没有人遇到过 jquery_ujs mangling callback url,它会中断 ajax 屏幕更新?

Rails 4: Has anyone encountered jquery_ujs mangling callback url, which breaks ajax screen update?

Catch-22——如果我在我的应用程序中加载 jquery_ujs,在执行时我观察到 jquery_ujs 代码从 rails 中提取了错误的 path/url 值,当它从服务器请求不存在的 url 时产生一个安静的 (e) 。

如果我不在 application.js 中加载 jquery_ujs,回调 url 不会被破坏,并且页面会按预期更新,但我会放弃 rails.js.嘘.

rails 的新手。我不知道答案是否就在眼前。也许是。我有 gem 碰撞问题吗?想法?建议?

可能相关:使用 Google 地图 api。地图上的活跃听众-canvas.

application.js (w/o jquery_ujs)

//= require jquery
//= require bootstrap
//= require turbolinks
//= require_tree .

(rails.js 在树中 不是

宝石文件

    source 'https://rubygems.org'
ruby                          '1.9.3'
gem 'bcrypt',                 '3.1.7'
gem 'faker',                  '1.4.2'
gem 'carrierwave',            '0.10.0'
gem 'mini_magick',            '3.8.0'
gem 'fog',                    '~> 1.23.0', require: 'fog/aws/storage'
gem 'rails',                  '4.1.4'
gem 'pg'
platforms :mswin do
  # gems specific to windows
  gem 'tzinfo'
end
gem 'geocoder',               '1.2.6'
gem 'validate_url'
gem 'country_select',         '~> 2.1.0'
gem 'will_paginate',          '3.0.7'
gem 'bootstrap-will_paginate','0.0.10'
gem 'bootstrap-sass',         '3.3.1'
gem 'simple_form',            '~> 3.1.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder',               '~> 2.0'
gem 'rails-html-sanitizer',   '1.0.1'
gem 'sdoc',                   '~> 0.4.0',          group: :doc

# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer',  platforms: :ruby
# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development
# gem 'debugger', group: [:development, :test]

group :development do
  gem 'spring'
end

group :assets do
# NTS sprockets-rails claims to include this  gem 'sass-rails'
# NTS sprockets-rails claims to include this  gem 'coffee-rails',            '~> 4.0.1'
  gem 'sprockets-rails', '~> 2.2.0', :require => 'sprockets/railtie'
  gem 'uglifier',                '>= 1.3.0'
end

group :test do
  gem 'minitest-reporters', '1.0.5'
  gem 'mini_backtrace',     '0.1.3'
  gem 'guard-minitest',     '2.3.1'
end

group :production do
  gem 'rails_12factor',     '0.0.2'
  gem 'unicorn',            '4.8.3'
end

尝试了没有 Google 加载地图 API DOM 侦听器且没有 Turbolinks 的瘦应用程序版本。 Ajax 有效。将 Google Map API 放回去,ajax 仍然有效。 Turbolinks 重新加入并 ajax 损坏。

我通过执行以下操作恢复了 Turbolinks 并且 DOM 侦听器回调工作:

  1. 已将 rails 更新到 4.2.0(无论如何都需要这样做)

  2. 已将 jquery_rails 及其运行时依赖项添加到 gem 文件

    gem 'jquery-rails', '~> 4.0.3'

    gem 'rails-dom-testing', '~> 1.0.5'

    gem 'railties', '~> 4.2.0'

    gem 'thor', '~> 0.19.1'

    gem 'nokogiri'

    gem 'activesupport', '~> 4.2.0'

  3. Application.js

    //= 要求 jquery

    //= 要求 jquery.turbolinks

    //= 要求 jquery_ujs

    //= 要求 bootstrap

    //= 需要 turbolinks

    //= require_tree .

  4. Javascript 挂钩

destroy.js

// Ajax handlers, destroy a following relationship
$("#follow_form").html("<%= escape_javascript(render('/users/follow')) %>");
$("#followers").html('<%= @user.followers.count %>');

create.js

// Ajax handler, create a following relationship
$("#follow_form").html("<%= escape_javascript(render('/users/unfollow')) %>");
$("#followers").html('<%= @user.followers.count %>');

Turbolinks 是您需要做出明智的使用决定的东西。它有优点也有缺点。确实存在问题,但我暂时坚持。


已添加 发布另一个问答,进一步阐明这个棘手的问题: