如何使用ajax重新加载js.jrs文件

时间:2011-01-24 06:51:03

标签: javascript ruby-on-rails ajax

我在rails应用程序上构建ruby。 我有html partial包含一个对象的属性 - @ shout.content(text attribute)。

在控制器中,Shout是 - @shout = Shout.last

这个想法是@shout每次创建一个新的喊叫时都会改变(它会变成新的喊叫)。 我希望每隔3秒,部分(包含@ shout.content)将使用ajax“刷新”。

我想把JavaScript函数每隔3秒重复一次:

setInterval( "updateShout()", 3000 ); 

updateShout()将运行一个js.rjs文件来执行此操作:

page.replace_html('content', render(:partial => 'content', :locals => {:content => @shout.content}))

缺少的部分是updateShout()函数。我不知道如何使用javascript执行js.rjs文件。

你知道如何使用javascript执行js.rjs吗?

谢谢,

乌迪德

2 个答案:

答案 0 :(得分:0)

鉴于您(似乎)正在使用Prototype,您可以大大简化这一过程。首先,不要打电话给setInterval,而是将其放在页面底部的<script>标记中:

new Ajax.PeriodicalUpdater('content', '/path/to/shouts.js', { method: 'get', frequency: 3});

确保使用适当的网址替换/path/to/shouts.js。有关详细信息,请参阅periodicalUpdater

然后,您需要的只是控制器中的以下内容,而不是您的RJS部分:

respond_to do |format|
  format.html
  format.js { render :text => @shout.content }
end

这将在系统中呈现最新喊叫的文本并将其发送回浏览器,让PeriodicalUpdater替换content div中的文本。

答案 1 :(得分:-1)

你只是在调用partials,你需要触发一个AJAX查询来获取记录,并根据需要设置ui。如果你正在使用jquery然后激活AJAX请求创建js.erb文件并调用你将生成所需的部分HTML,成功请求时只需更新您的DOM元素。

$.ajax({
       type: "GET",
       url: "<%= url %>"
     success: function(html){
          $("#content").html(html);
      }
   });