2011-09-19 192 views
5

好的,我已经在我的Rails应用中使用ajax了相当长的时间。不知怎的,我第一次的Rails 3.1应用程序,我不能得到基本的工作..无法让UJS在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?'); 

现在,从我可以告诉,提交此表应触发警报框。它没有。表单提交确实发送到控制器操作,该操作确实呈现模板:

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!' 

..它会触发一个确认框,符合市场预期。

我可能会错过什么?任何方向看,将不胜感激。

谢谢 欧文

UPDATE:

如此看来轨道被证明是错误的内容类型的标题,提供text/html而不是text/javascript。一些测试后连:

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

仍将呈现与内容类型text/html

页眉当我运行相同版本的jquery-rails它工作提出新的申请。在这个应用程序它不..

我应该在哪里看?

回答

1

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

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为文本/ HTML,我前一段时间添加了测试并忘记关闭:

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