好的,我已经在我的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 操作,该 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

关于jquery - 无法使UJS在Rails 3.1中工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7476423/

10-12 13:01
查看更多