Rails 重定向后 Javascript 未执行

标签 javascript jquery ruby-on-rails redirect

我的应用程序包含一个非常简单的登录和两个单独的 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/

相关文章:

javascript - 使用带有字符串和 bool 值的对象创建 Json 列表

javascript - Jquery首次克隆div,停止用户克隆6次以上

javascript - jquery 显示/隐藏 block 中的 Ruby 变量

jquery - icheck 复选框不适用于 angularjs

javascript - 如何在jqGrid中调用重置选择和全选?

javascript - Rails 表单提交与远程 => true -- js 文件渲染但不执行

javascript - 如何通过node.js在ejs file::Javascript上显示存储在mySQL中的数据

javascript - 如何使用 javascript 将 html 5 Canvas 居中

javascript - 使用 devise-Angular 时如何正确获取错误消息(json)

ruby-on-rails - 如何使用Google Analytics(分析)追踪Rails中的使用者