【问题标题】:Rails 3.2 .js.erb renders but never firesRails 3.2 .js.erb 渲染但从不触发
【发布时间】:2012-02-03 04:30:21
【问题描述】:

我遇到了一个非常令人困惑的问题。我以前做过,但不知道为什么它在这种情况下不起作用,如果有人知道从哪里开始寻找,我将不胜感激。

# app/views/petitions/new
<%= form_for @petition, :remote => true do |form| %>
  <%= form.submit "Submit", :class => "primary" %>
<% end %>


# app/controllers/petitions_controller       
def create
  # I've stripped everything out of here to isolate the issue
end

# app/views/petitions/create.js.erb
alert("Hello World");

# log
Started POST "/petitions" for 127.0.0.1 at 2012-02-02 23:07:43 -0500
Processing by PetitionsController#create as JS
Parameters: {"utf8"=>"✓", "authenticity_token"=>"bWXmagSz0hVqhQ1/1U480kQUYcIhmSEbNMAofWYT2Oc=", "petition"=>{"name"=>"", "email"=>"", "location"=>""}, "commit"=>"Submit"}
  Rendered petitions/create.js.erb (0.0ms)
  User Load (0.3ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
  SQL (0.6ms)  UPDATE `users` SET `last_activity_at` = '2012-02-03 04:07:43' WHERE `users`.`id` = 1
Completed 200 OK in 5ms (Views: 2.5ms | ActiveRecord: 0.9ms)

“alert()”永远不会触发,我在.js.erb 视图中放入的任何其他内容也不会触发,即使日志显示Rendered petitions/create.js.erb (0.0ms)。我以前在其他(非 3.2)项目中这样做过,所以我确信我正在做一些非常愚蠢的事情,或者这里发生了一些非常偷偷摸摸的事情。


更新 - Firebug 似乎告诉我我收到的内容类型是“text/html”而不是“text/javascript”。我仍然不确定为什么会发生这种情况或从哪里开始寻找原因,任何提示将不胜感激。

【问题讨论】:

  • 如果你在开发环境中,sprockets 会自动加载你需要的所有 js 文件。在浏览器中查看您的资源,看看是否正在加载 create.js。
  • 打开firebug并观察响应。因为即使js响应中的单个语法错误也会停止在浏览器上执行的脚本。
  • 没有,我刚查了一下,好像没抓到。
  • Firebug 告诉我 Content-type 是 "text/html; charset=utf-8" ,这不对吗?
  • 是的,我想通了,和这里做的完全一样:stackoverflow.com/questions/7482742/…

标签: javascript ruby-on-rails ruby-on-rails-3.2


【解决方案1】:

您的PetitionsController 顶部应该有以下行:

respond_to :js, :only => :create

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-21
    • 2016-12-30
    • 2013-07-06
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2012-02-24
    • 2012-12-08
    相关资源
    最近更新 更多