当尝试使用AJAX时,Rails 4将JS作为纯文本加载
Rails 4 loads JS as plain text when trying to use AJAX
我试图创建一个简单的两列页面。在左栏中,用户可以填写表单。在表单提交中,我希望刷新右列(通过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
相关文章:
- 当脚本由system.js加载时,如何要求('electron')
- 使用JS加载HTML元素
- Mailchimp内联表单验证不适用于JS加载的HTML
- 使用Microsoft Office.js加载项进行自动身份验证
- PHP 图表 js 加载 mysql 和接口
- 节点JS加载JS&ejb文件中的css文件
- 使用springy.js加载多个图形时闪烁画布
- 何时需要JS加载所有模块
- Backbone Js加载部件中的应用程序
- 击倒没有定义?确实需要js加载任何内容
- 使用三个js加载三维模型示例
- Knockout.JS加载顺序问题
- jquery选项卡和js加载内容
- Features.js-加载静态内容
- MongoDB脚本和CSV文件:我可以使用require.js加载jquery.CSV吗
- Ember.js加载模板上的Per-Model Promise状态
- 延迟js加载的最佳方式
- 使用D3.js加载用于可视化的本地数据
- 用angular.js加载更多分页|按钮dos'不要藏起来
- 如何使用队列.js和 D3.js 加载多个文件