2012-01-21 70 views
0

我正在頁面上執行非ajax GET請求。在相應的控制器/操作中,我返回javascript。但是,這個JavaScript沒有被執行。相反,它在我的瀏覽器上顯示爲文本。rails 3儘管文本/ javascript內容類型作爲響應,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

非阿賈克斯得到的是永遠只是要更換當前頁面的響應內容。 –

+0

因此,如果我希望能夠在我的動作邏輯中使用javascript給出警報,那麼我需要在該動作對應的頁面上執行AJAX GET?這似乎有點可笑...所以如果我有一個之前的過濾器,檢查用戶是否簽名,如果用戶沒有登錄,我想顯示一個JS警報,那麼我將需要執行AJAX請求在過濾前的所有頁面上? – deruse

+0

不一定 - 您返回的HTML頁面可能包含腳本標籤,以顯示您的警報。 –

回答

0

如果您想實現您在評論中所述內容:「用戶希望從第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 
相關問題