我正在尝试创建一个包含两列的简单页面。在左边的列中,用户可以填写表单。在表单submit上,我希望右边的列刷新(通过AJAX),并使用控制器中创建的@url字符串填充div。现在,表单提交根本不触发我的.js页面上的代码,而是从页面重定向,并在浏览器中以纯文本的形式加载.js。这应该很简单--我做错什么了?
在配置/路由中:
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载于views/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在views/home/spinify.js.erb中:
console.log("This is working"); // but it isn't
$('#generated-url').html('http://www.justanexample.com');发布于 2015-07-12 19:56:19
我明白了!This answer让我走上了正确的道路。由于jquery_ujs中的javascript标记,application.html.erb无法正常工作。原来我需要改变这一点:
<%= javascript_include_tag :defaults %>
对此:
<%= javascript_include_tag 'application' %>
在排除单独的模板问题时,我更改了该行,并忘记将其切换回来。我还从控制器中删除了render语句(per @VenkatCh的回答-谢谢!),现在一切都很好。
respond_to do |format| format.js end
发布于 2015-10-06 09:27:50
如果您的js.erb文件中没有包含jquery_ujs库,则application.js文件呈现为文本:
//= require jquery
//= require jquery_ujs我打赌这就是“默认”和“应用程序”文件之间的区别所在。
您需要在您的宝石文件中使用以下宝石:
gem 'jquery-rails'
gem 'jquery-ui-rails'https://stackoverflow.com/questions/31371029
复制相似问题