2010-01-02 81 views
0

我試圖建立一個通知用戶任何新的私人消息的系統,消息控制器的index方法創建實例@messages和@newmessages的變量,兩者都用於index.html .erb,我想讓它變成這樣index.js.erb會讓我的網站上的Flash消息框出現。在rails中發送Javascript請求

Ive得到jQuery的運行每隔幾秒鐘一個功能,即獲取運行的功能

function checkagain(){ 
//Start a Timer, dont want it bombarding the server with constant requests 
$.timer(10000,function(){ 
    $.getScript("/messages.js"); 
    //RECURSE, see you again in 10 seconds 
    checkagain(); 
}); 
} 

$ .getScript似乎不使其運行在index.js.erb的代碼是簡單的:

alert("RESPONDING"); 

我似乎無法讓它觸發該頁面上的代碼。

我發現/messages.js不返回任何JavaScript,只是一樣index.html.erb

控制器的index動作是:

def index 
    @messages = Message.find(:all, :conditions => "receiver_id = '#{current_user.id}' AND `read` = '1'") 
    @newmessages = Message.find(:all, :conditions => "receiver_id = '#{current_user.id}' AND `read` = '0'") 
end 
+1

題外話,但你在做什麼沒有遞歸。評論是誤導性的。 – 2010-01-02 21:26:37

+0

它在該函數的新版本中基本上是相同的東西,但將更高的延遲傳遞到下一個函數調用,然後在延遲超過10分鐘時停止 – Arcath 2010-01-02 21:33:55

+0

問題是,checkagain或匿名函數都不在棧中兩次與此同時;因此,沒有遞歸。 – 2010-01-02 21:42:52

回答

0

嘗試追加一個隨機查詢字符串,以強制您的瀏覽器重新下載js文件:

$.getScript("/messages.js?random=" + Math.random()); 
+0

jquery allready似乎這樣做,我不能在.js文件中使用紅寶石 – Arcath 2010-01-02 15:21:04

0

您可以發佈消息控制器的索引操作中的一些代碼嗎?這似乎不是一個jQuery的問題,如果messages.js沒有返回你期望的JavaScript。

是否有一個應該返回該警報調用的messages/index.js.erb視圖,或者您的公共目錄中是否存在messages.js文件?

+0

添加索引行動的代碼 – Arcath 2010-01-02 20:42:39

0

你可以看看Juggernaut這將允許你使用Flash 8資源推送到客戶端瀏覽器。

+0

id而不是使用閃光燈原因90%的客戶端將只是閃光燈崩潰 – Arcath 2010-01-02 21:29:03

+0

也使用原型使用jQuery – Arcath 2010-01-02 23:57:41