我的应用程序包含一个非常简单的登录和两个单独的 AJAX 调用。我有一个加载微调器,只要页面准备好它就会自动隐藏它包含在 index.js 中
$(function() {
$("loading").hide();
$("#scan_button").on("ajax:success", function(e, data, status, xhr) {
$("#standard_results").hide();
$("#results").show();
$("#results").html(data);
});
$(document).ajaxStop(function() {
$("#loading").hide();
});
$(document).ajaxStart(function() {
$('#loading').show();
});
});
当用户登录时会发生以下情况
class SessionController < ApplicationController
def create
user = User.find_by(username: params[:session][:username])
if(user.password == params[:session][:password])
log_in user
redirect_to root_path
end
end
def destroy
logout
redirect_to root_path
end
end
路由路径将我带回存在 index.js 文件的“home#index”。当用户登录时,重定向发生并且加载微调器被隐藏并且所有 JavaScript 都按预期执行。
当用户点击注销时,重定向发生了,但是显示了加载微调器并且没有 JavaScript 被执行。这是我的包含 JavaScript 的 index.html.erb 文件。
<% content_for :title, "Network Monitor" %>
<div class="container-fluid">
<nav class="navbar narvbar-dark bg-inverse">
<span class="navbar-brand">Network Monitor</span>
<%= link_to "Scan", scan_path, remote: true, class: "btn btn-secondary", id: "scan_button" %>
<% if logged_in? %>
<span class="pull-xs-right"><%= link_to "Logout", logout_path, class: "btn btn-secondary" %></span>
<% else %>
<%= form_for(:session, url: login_path, :html => {:class => 'form-inline pull-xs-right'}) do |f| %>
<%= f.text_field :username, class: 'form-control', placeholder: "Username" %>
<%= f.password_field :password, class: 'form-control', placeholder: "Password" %>
<%= f.submit "Log in", class: 'btn btn-primary', id: 'login_button' %>
<% end %>
<% end %>
</nav>
<div id="loading">
<%= image_tag "loading.gif", class: "loading_gif" %>
</div>
<div class="row">
<div class="col-md-12">
<div id="scan_bar">
<h3>Welcome to your network monitor!</h3> <br />
<p>To get started hit the scan button in the top right corner, this will detect the computers that are alive on your network and show them below.</p>
</div>
</div>
</div>
<div class="row">
<div id="results">
</div>
<div id="standard_results">
</div>
最佳答案
已解决。就像使用
一样简单$(document).on('turbolinks:load', function() {});
与我发布的不同,这似乎是 Rails 5 和 turbolinks 希望您使用的方式,而且它奏效了。
关于Rails 重定向后 Javascript 未执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36823385/