Erw*_*inM 5 jquery ujs ruby-on-rails-3.1
好的,我已经在我的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?');
Run Code Online (Sandbox Code Playgroud)
现在,据我所知,提交此表单应触发警告框.它没有.表单提交确实会进入控制器操作,该操作会渲染模板:
Rendered teaser_pages/signup.js.erb (0.1ms)
Completed 200 OK in 8ms (Views: 7.2ms | ActiveRecord: 0.0ms)
Run Code Online (Sandbox Code Playgroud)
只触发没有js.
虽然(我认为)UJS助手已经加载并运行,因为如果我这样做..
link_to 'click me', '#', :confirm => 'confirmation box!'
Run Code Online (Sandbox Code Playgroud)
..it将按预期触发确认框.
我能错过什么?任何看起来的方向将不胜感激.
谢谢你,欧文
更新:
所以似乎rails在标题中证明了错误的内容类型,text/html而不是text/javascript.经过一些测试甚至:
render :js => "alert('AHAHAHAHA');", :content_type => 'text/javascript'
Run Code Online (Sandbox Code Playgroud)
仍将呈现内容类型的标头 text/html
当我运行一个新的应用程序与相同版本的jquery-rails工作.在这个应用程序中它不..
我应该在哪里看?
小智 1
我遇到了同样的问题。我也使用相同的 gemfile 设置了一个测试应用程序,并得到了与您描述的相同的结果:它可以在新创建的应用程序中运行,但不能在旧的应用程序中运行。目前,我在实际渲染调用之前手动设置内容类型标头。
respond_to do |format|
headers["Content-type"] = 'text/javascript'
format.js { render "the_template" }
end
Run Code Online (Sandbox Code Playgroud)
另一方面,这并没有改变正确传递的 content_type:
respond_to do |format|
format.js { render "the_template", :content_type => 'text/javascript' }
end
Run Code Online (Sandbox Code Playgroud)
希望这暂时有帮助。
您在此期间得到真正的解决方案了吗?
更新:
至少我发现了我真正的问题。我有一个 before_filter 强制将 content_type 转换为 text/html ,这是我前段时间为了测试而添加的,但忘记停用:
def set_header
response.headers["Content-Type"] = "text/html; charset=utf-8"
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
785 次 |
| 最近记录: |