2010-01-02 82 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