Rails渲染js文件但不能执行它

时间:2015-10-29 10:32:20

标签: javascript ruby-on-rails ruby

我的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是因为我有其他调用,如此处所描述的那样,并且正常运行

5 个答案:

答案 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>