rails 3 javascript未执行,尽管响应的是text/javascript内容类型

rails 3 javascript not executed despite a text/javascript content-type in response

本文关键字:javascript text 类型 执行 rails 响应      更新时间:2023-09-26

我正在页面上执行一个非ajax GET请求。在相应的控制器/操作中,我返回javascript。但是,这个javascript并没有被执行。相反,它在我的浏览器上显示为文本。

被击中的动作:

def my_action
  render :template => 'shared/_alert.js.erb', :content_type => 'text/javascript'
end

js.erb文件:

alert("hello");

Charles HTTP请求:

GET /my_action HTTP/1.1
Host: 172.16.151.186:3000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.52.7 (KHTML, like Gecko) Version/5.1.2 Safari/534.52.7
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Cache-Control: max-age=0
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Cookie: _session_id=BAh7CEkiD3Nlc3Npb25faWQGOgZFRiIlZGZhMjFkOWRlNDQ3ZThlYjRiMzljNzMyMjg0N2E2YmJJIhBfY3NyZl90b2tlbgY7AEZJIjFtZ05jUmsxZlRIQ1FCaVVLczVCeUF2STNtY1gzUzhucTk3alF4RjVsVklFPQY7AEZJIhRjdXJyZW50X3VzZXJfaWQGOwBGSSIpYjMwNzg5NzItNDQzNi0xMWUxLTk5YzUtNGY3NjNlNzJhZmIyBjsARg%3D%3D--e345e67c4b130d2f3e4bdb48bd3d5d4f892f8272
Pragma: no-cache
Connection: keep-alive

Charles HTTP响应:

HTTP/1.1 200 OK 
Content-Type: text/javascript; charset=utf-8
Etag: "9b9a7c156c510c98d7fd224227f7431f"
Cache-Control: max-age=0, private, must-revalidate
X-Ua-Compatible: IE=Edge
X-Runtime: 0.246125
Server: WEBrick/1.3.1 (Ruby/1.9.2/2011-07-09)
Date: Sat, 21 Jan 2012 15:23:09 GMT
Content-Length: 15
Connection: Keep-Alive
Set-Cookie: _session_id=BAh7CEkiD3Nlc3Npb25faWQGOgZFRiIlZGZhMjFkOWRlNDQ3ZThlYjRiMzljNzMyMjg0N2E2YmJJIhBfY3NyZl90b2tlbgY7AEZJIjFtZ05jUmsxZlRIQ1FCaVVLczVCeUF2STNtY1gzUzhucTk3alF4RjVsVklFPQY7AEZJIhRjdXJyZW50X3VzZXJfaWQGOwBGSSIpYjMwNzg5NzItNDQzNi0xMWUxLTk5YzUtNGY3NjNlNzJhZmIyBjsARg%3D%3D--e345e67c4b130d2f3e4bdb48bd3d5d4f892f8272; path=/; HttpOnly
alert("hello");

有人能帮我解决这个问题吗?

谢谢。

如果你想实现你在评论中所说的:"用户想从第X页转到第Y页,但出现了错误。"标准的方法是将flash[:error]哈希设置为你的消息,然后重定向回引用页面。在你的布局中,你会有一些erb片段,比如:

<% if flash[:error %>
  <div class='flash error'><%= flash[:error] %></div>
<% end %>

在你的控制器上,你会设置一个前置过滤器,比如:

before_filter :validate_user
def before_filter
  if <some condition is not met>
    flash[:error] = "Oops...you are not logged in"
    redirect_to :back   # or some_defined_path
  end
end