Turbolinks verursachen ein “jquery-ujs wurde bereits geladen!” Error

Lesezeit: 3 Minuten

Ich habe eine neuere Rails 4-App, die enthält nein benutzerdefiniertes Javascript – die Ordner app/assets/javascripts, lib/assets/javascripts und vendor/assets/javascripts sind alle leer (außer app/assets/javascripts/application.js).

Wenn ich in der App herumklicke, bekomme ich immer wieder den Fehler jquery-ujs has already been loaded! in der JS-Konsole. Es passiert jedes Mal, wenn ich auf die Schaltfläche “Zurück” drücke, und manchmal, wenn ich auf einen normalen Link klicke (obwohl ich es nicht konsequent machen kann).

Anwendung.js:

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

Wenn ich Turbolinks aus application.js entferne, bekomme ich den Fehler nicht mehr … also scheint Turbolinks der Schuldige zu sein.

Ist das ein Fehler mit Turbolinks oder mache ich etwas falsch?

Hier ist mein Gemfile:

source 'https://rubygems.org'

ruby '2.0.0'

gem 'rails', '4.0.0'

gem 'active_model_serializers'
gem 'aws-sdk'
gem 'bootstrap-sass-rails'
gem 'coffee-script-source', '1.5.0'
gem 'coffee-rails', '~> 4.0.0'
gem 'devise'
gem 'factory_girl_rails', '4.1.0'
gem 'figaro'
gem 'font-awesome-sass-rails'
gem 'jbuilder', '~> 1.2'
gem 'jquery-rails'
gem 'paperclip'
gem 'paperclip-meta', github: 'y8/paperclip-meta'
gem 'pg'
gem 'sass-rails', '~> 4.0.0'
gem 'turbolinks'
gem 'uglifier', '>= 1.3.0'

group :production do
  gem 'rails_12factor'
end

group :doc do
  gem 'sdoc', require: false
end

group :test do
  gem 'capybara', '2.1.0'
end

group :development, :test do
  gem 'childprocess', '0.3.9'
  gem 'debugger'
  gem 'faker', '~> 1.2.0'
  gem 'json_spec'
  gem 'rspec-rails'
  gem 'rspec-mocks'
end

group :development do
  gem 'annotate'
  gem 'hirb'
  gem 'wirb'
end

Ändern der Reihenfolge der requires in application.js scheint auch nicht zu helfen.

Benutzer-Avatar
Puhlze

Die wahrscheinlichste Erklärung ist, dass Sie Ihre einschließen Skripte auf der Seite body.

Weitere Informationen finden Sie in dieser Ausgabe: https://github.com/rails/turbolinks/issues/143

Von dem Turbolinks-Readme:

Als Faustregel gilt, wenn Sie zu Turbolinks wechseln, verschieben Sie alle Ihre Javascript-Tags in die head und arbeiten Sie dann rückwärts, indem Sie den Javascript-Code nur dann zurück in den Körper verschieben, wenn dies unbedingt erforderlich ist. Wenn Sie Skript-Tags im Text haben, die nicht erneut ausgewertet werden sollen, können Sie dies festlegen data-turbolinks-eval zuschreiben false:

<script type="text/javascript" data-turbolinks-eval=false>
  console.log("I'm only run once on the initial page load");
</script>

  • Ich habs! ich hatte meine <%= javascript_include_tag ... %> vor meiner Schließung </body> -Tag – Verschieben innerhalb des <head> das Problem behoben. Vielen Dank!

    – GMA

    19. Dezember 2013 um 15:12 Uhr

  • Ich hatte zufällig das Javascript-Tag im Hauptteil eines Layouts. Das hat mich echt fertig gemacht.

    – thedanotto

    2. Dezember 2016 um 19:20 Uhr


  • Ich weiß, dass die Frage vor langer Zeit beantwortet wurde, aber ich möchte an meinem Fall mitarbeiten … Ich hatte ein solches Problem, aber in der Produktion, nachdem ich einige Updates in CoffeeScript-Dateien gepusht hatte. Und das Problem war sehr einfach: Cache. Wahrscheinlich hat die Seite versucht, sowohl die alte als auch die neue gebündelte Skriptdatei zu laden. Es wurde für meinen Browser gelöst, indem Strg + F5 gedrückt wurde, um zwischengespeicherte Ressourcen zu ignorieren.

    – Diego Stiehl

    28. September 2019 um 18:39 Uhr

Ich hatte das gleiche Problem und nachdem ich einige Treffer und Versuche gemacht hatte, stellte ich fest, dass die Reihenfolge der Javascript-Dateien wichtig war.

Der Arbeitsablauf ist

//= require jquery
//= require jquery_ujs
//= require jquery.turbolinks
//= require turbolinks

Hoffe, diese Lösung wird jemandem helfen.

Das Problem, das ich hatte, war, dass ich das <%= render 'layouts/head'%> zweimal kopiert habe!, im Kopf und im Körper. Überprüfen Sie die Datei laouts/application.html.erb

Für mich hatte ich diese zweimal geschrieben, also wurde sie zweimal geladen. Einmal in application.js //= require jquery und einmal in application.html.erb als script tag.

1155940cookie-checkTurbolinks verursachen ein “jquery-ujs wurde bereits geladen!” Error

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy