尽管响应中有文本/javascript内容类型,但未执行rails 3 javascript

尽管响应中有文本/javascript内容类型,但未执行rails 3 javascript,javascript,ruby-on-rails,Javascript,Ruby On Rails,我正在一个页面上执行一个非ajax GET请求。在相应的控制器/操作中,我返回javascript。但是,没有执行此javascript。相反,它在我的浏览器上显示为文本 被击中的动作: def my_action render :template => 'shared/_alert.js.erb', :content_type => 'text/javascript' end alert("hello"); GET /my_action HTTP/1.1 Host: 172

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

被击中的动作:

def my_action
  render :template => 'shared/_alert.js.erb', :content_type => 'text/javascript'
end
alert("hello");
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
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");
js.erb文件:

def my_action
  render :template => 'shared/_alert.js.erb', :content_type => 'text/javascript'
end
alert("hello");
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
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");
查尔斯HTTP请求:

def my_action
  render :template => 'shared/_alert.js.erb', :content_type => 'text/javascript'
end
alert("hello");
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
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");
Charles HTTP响应:

def my_action
  render :template => 'shared/_alert.js.erb', :content_type => 'text/javascript'
end
alert("hello");
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
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
before\u过滤器:验证用户
def前置过滤器
如果
flash[:error]=“哎呀……您没有登录”
重定向到:返回或某个定义的路径
结束
结束

非Ajax get总是将当前页面替换为响应的内容。因此,如果我希望能够在我的操作逻辑中满足特定条件时使用javascript发出警报,那么我需要在该操作对应的页面上执行Ajax get??这似乎有点可笑。。。因此,如果我有一个before筛选器,用于检查用户是否已登录,如果用户未登录,我想显示一个JS警报,那么我需要在所有具有before筛选器的页面上执行AJAX请求??不一定-返回的HTML页面中可能有显示警报的脚本标记。当然,但我设想一个用户已经在第X页上了。用户想转到第Y页,但出现了一个错误。用户会在第X页通过一些JS得到警告。根据您的说法,为了实现这一点,我需要在页面Y上执行ajaxget请求,对吗?我不明白为什么您不能呈现页面Y,可能会在页面上显示错误消息。您需要一个Ajax请求才能在第X页上运行js,但显然,当您只想呈现第Y页时,情况会变得更加复杂。我不知道你用这个做了什么