当尝试使用AJAX时,Rails 4将JS作为纯文本加载

Rails 4 loads JS as plain text when trying to use AJAX

本文关键字:JS 加载 文本 Rails AJAX      更新时间:2023-09-26

我试图创建一个简单的两列页面。在左栏中,用户可以填写表单。在表单提交中,我希望刷新右列(通过AJAX),并用在控制器中创建的@url字符串填充div。现在,表单提交根本不会触发.js页面上的代码——相反,它会从页面重定向到别处,并将.js作为纯文本加载到浏览器中。这应该很简单——我做错了什么?

在config/路线:

    root 'home#home'
    post '/pixify', to: 'home#pixify', as: "pixify",  format: 'js'
在HomeController:

    class HomeController < ApplicationController
      respond_to :html, :js
      skip_before_action :verify_authenticity_token
      def home
      end
      def pixify
        @url = "http://example-url.com"
        respond_to do |format|
          format.js { render :layout => false }
        end
      end
    end
在视图/home/home.html.haml:

   %div#container
     %div.left-column
       = form_tag pixify_path, :remote => true do
         %fieldset
            %ul
                %li
                    %label{:for => "url-id"} URL ID:  
                    %input{:type => "text", :name => "url-id"}
            %input{:type => "submit", :value => "Generate url", :class => "button"}
     %div.right-column
       %div#generated-url
在视图/home/pixify.js.erb:

    console.log("This is working");   // but it isn't
    $('#generated-url').html('http://www.justanexample.com');

js。如果您的application.js文件中没有包含jquery_ujs库,则Erb文件将呈现为文本:

//= require jquery
//= require jquery_ujs

我打赌这就是'default'文件和'application'文件之间的区别。

你需要在你的gemfile中包含以下gems:

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

我明白了!这个回答使我走上了正确的道路。由于application.html.erb中的javascript标记,jquery_ujs无法正常工作。原来我需要改变这个:

<%= javascript_include_tag :defaults %>

:

<%= javascript_include_tag 'application' %>

我在排除一个单独的模板问题时更改了这一行,但忘记将其切换回来。我还从控制器中删除了渲染语句(根据@VenkatCh的回答-谢谢!),现在一切都很好。

respond_to do |format| format.js end