2012-01-21 10 views
0

ページ上で非Ajax GETリクエストを実行しています。対応するコントローラ/アクションでは、私はJavaScriptを返しています。しかし、このjavascriptは実行されていません。むしろ、ブラウザ上にテキストとして表示されています。rails 3応答がtext/javascriptのcontent-typeでもjavascriptが実行されない

アクションがヒットしている:

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

js.erbファイル:

alert("hello"); 

チャールズ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 

チャールズ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"); 

は、いくつかは、私は、このトラブルシューティングを助けることができますか?

ありがとうございました。

+0

非Ajaxは常にちょうど置き換えるために起こっている取得します現在のページにレスポンスの内容を追加します。 –

+0

アクションロジックで特定の条件が満たされている場合にjavascriptを使用してアラートを送信する機能が必要な場合は、そのアクションが対応するページでAJAX GETを実行する必要があります。これはちょっとばかげているようです...もし私がユーザーに署名されているかどうかをチェックする前のフィルタを持っていて、ユーザーがサインインしていなければJSアラートを表示したいのですが、AJAXリクエストを実行する必要がありますその前にフィルタがあるすべてのページで?? – deruse

+0

必ずしもそうではありません - あなたが返すHTMLページに、アラートを表示するスクリプトタグが含まれている可能性があります。 –

答えて

0

コメントに記載された内容を達成したい場合:「ユーザーはXページからYページに行きたいが、エラーがあります。」これを行う標準的な方法は、あなたのメッセージにflash [:error]ハッシュを設定し、参照ページにリダイレクトします。

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

をなど、あなたのコントローラ上で、あなたは前にフィルタを設定したい:あなたのレイアウトでは、のようないくつかのERBスニペットを持っていると思います

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