Skip to main content
 首页 » 编程设计

jquery之无法让 UJS 在 Rails 3.1 中工作

2026年07月28日11davidwang456

好的,我在 Rails 应用程序中使用 ajax 已经有一段时间了。不知何故,在我的第一个 Rails 3.1 应用程序中,我无法让基础知识发挥作用。

# application.js 
//= require jquery 
//= require jquery_ujs 
 
# the form 
= form_for @signup, :url => '/signup', :remote => true do |f| 
    = f.text_field :email, :class => 'email', :size => 26 
    = f.submit 'Notify me' 
 
# the controller 
def signup        # route.rb has 'match '/signup' => 'controller#signup' 
  respond_to do |format| 
    format.js 
  end 
end 
 
# view: signup.js.erb 
alert('wtf?'); 

现在,据我所知,提交此表单应该会触发警报框。事实并非如此。表单提交确实会传递到 Controller 操作,该操作会呈现模板:

Rendered teaser_pages/signup.js.erb (0.1ms) 
Completed 200 OK in 8ms (Views: 7.2ms | ActiveRecord: 0.0ms) 

只是没有触发js。

UJS 助手已加载并正常运行(我认为),因为如果我这样做..

link_to 'click me', '#', :confirm => 'confirmation box!' 

..它将按预期触发确认框。

我可能会错过什么?任何方向的寻找将不胜感激。

谢谢你, 埃尔文

更新:

因此,rails 似乎证明了 header 中的内容类型错误,提供了 text/html 而不是 text/javascript。经过一些测试甚至:

render :js => "alert('AHAHAHAHA');", :content_type => 'text/javascript' 

仍将呈现内容类型为text/html的 header

当我使用相同版本的jquery-rails运行新的应用程序时,它可以工作。在此应用程序中,它没有..

我应该在哪里寻找?

请您参考如下方法:

我也遇到了同样的问题。我也使用相同的 gemfile 设置了一个测试应用程序,并得到了与您描述的相同的结果:它可以在新创建的应用程序中运行,但不能在旧的应用程序中运行。目前,我在实际渲染调用之前手动设置内容类型 header 。

respond_to do |format| 
  headers["Content-type"] = 'text/javascript' 
  format.js { render "the_template" } 
end 

另一方面,这并没有改变正确传递的 content_type:

respond_to do |format| 
  format.js { render "the_template", :content_type => 'text/javascript' } 
end 

希望这暂时有帮助。

您是否同时得到了真正的解决方案?

更新:

至少我发现了我真正的问题。我有一个 before_filter 强制 content_type 为 text/html ,这是我前段时间为了测试而添加的,但忘记停用:

def set_header 
response.headers["Content-Type"] = "text/html; charset=utf-8" 
end