我的Rails(3.2.6)应用程序上的Ruby(1.9.3p194(2012-04-20修订版35410)[x86_64-linux])有问题:我需要执行一个js文件,但我只能打印它。
查看:
291 <%= form_for :change_top_ten, remote: true, url: {controller: :users, action: :change_top_ten, format: :js} do |f| %>
292 <%= f.select :status, options_for_select(@categories_and_interests, selected: "tutti"), {class: :'deafult-select'}, onchange: "this.form.submit();" %>
293 <% end %>
控制器:
1658 def change_top_ten
1659 @filter = params[:change_top_ten][:status]
1660 end
change_top_ten.js.erb
1 alert('here');
服务器日志:
Started POST "/change_top_ten.js" for 10.0.2.2 at 2015-10-29 10:30:10 +0000
Processing by UsersController#change_top_ten as JS
Parameters: {"utf8"=>"✓", "authenticity_token"=>"+v0oW+p0fy9IxpfbaKTj7g9yZSzffK+SQG52Mx3vjwQ=", "change_top_ten"=>{"status"=>"prof_2"}}
User Load (56.4ms) SELECT "users".* FROM "users" WHERE "users"."has_confirmed" = 't' AND "users"."id" = ? LIMIT 1 [["id", 13]]
Rendered users/change_top_ten.js.erb (0.1ms)
Completed 200 OK in 154.7ms (Views: 34.9ms | ActiveRecord: 66.0ms)
该文件呈现为一个html页面:空白页面带有&#34; alert(&#39; here&#39;);&#34;印在上面。
编辑: 我正在编辑问题以回复第一条评论:
的application.js
1 // This is a manifest file that'll be compiled into application.js, which will include all the files
2 // listed below.
3 //
4 // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5 // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
6 //
7 // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8 // the compiled file.
9 //
10 // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
11 // GO AFTER THE REQUIRES BELOW.
12 //
13 //# require angular
14 //= require jquery
15 //= require jquery_ujs
16 //= require jquery.countdown
17 //= require jquery.remotipart
18 //# require_tree .
导入Jquery是因为我有其他调用,如此处所描述的那样,并且正常运行
答案 0 :(得分:1)
好的,所以对你的ajax查询的响应没有被评估为javascript。 尝试将以下内容添加到application.js文件中,或者在呈现表单之前将其执行。
$.ajax({
url: this.href,
dataType: "script",
beforeSend: function(xhr) {xhr.setRequestHeader("Accept", text/javascript");}
});
这样做是说将所有ajax调用的数据类型设置为&#39; script&#39;这应该意味着响应被评估为javascript。
答案 1 :(得分:0)
你只需在你的方法中放入respond_to js。请尝试下面的代码:
def change_top_ten
@filter = params[:change_top_ten][:status]
respond_to do |format|
format.js
end
end
它将运行您的change_to_ten.js.erb
文件。我希望这能帮到你。
答案 2 :(得分:0)
好的,所以你想在改变选择时提交表格,这与你原来的问题有点不同。
你想在你的application.js文件中添加一些javascript,它绑定到select控件的onChange事件。
即。像这样的东西:
$('select').onChange(function()
{
$('form').submit();
}
);
当任何选择被更改时,应该在页面上提交任何表单。 您可能希望将绑定范围限定为特定选择,并将提交范围设置为特定表单。
答案 3 :(得分:0)
我找到了一个临时解决方案。问题是这段代码:
onchange: "this.form.submit();"
删除后添加此代码:
<%= f.submit :Save, class: :'btn', type: :submit %>
js文件按照它应该执行。
如何使用onchange方法提交表单并执行我的js代码?
答案 4 :(得分:0)
确保它有开放的javascript代码,例如
<script type="text/javascript">
enter code here
</script>