【发布时间】:2015-11-30 14:06:48
【问题描述】:
Rails 3,JRuby
我最近参加了一个 jQuery 速成课程,其中包括一些 ajax 部分渲染。这让我开始思考,我是否可以使用它来使用 setInterval() 轮询 Rails 服务器,每 x 秒不断刷新页面的特定部分?
我遇到的问题是如何使用$.get() 方法获取部分的url 并使用load() 重新加载它。这就是混乱开始的地方 - 使用 Rails 3,我有一个名为“_microposts”的部分,在一个带有 'id="gf"' 的 div 中呈现(gf 表示全局提要)。这发生在我的 Rails 应用程序主页上,因此在这种情况下的 url 将是“//localhost:8080/home”,而不是部分的 url。
这是我最初的 javascript/jQuery
<script>
$(document).ready(function() {
setInterval(function (e) {
var url = $.get("<%= escape_javascript render :partial =>
'microposts/micropost', :locals => {:microposts => @microposts }%>");
$('#gf').html('loading...').load(url);
},10000);
});
</script>
这看起来不对,到目前为止,只是在 10 秒后将我的 _microposts 部分清空(因此 setInterval 正在工作,它肯定会更新正确的区域,只是有一个空格!)
编辑:
考虑到我的问题,我意识到这类似于从事件中更新部分内容,例如单击按钮或其他内容。唯一真正的区别是应该触发setInterval() 函数的“事件”。所以,我修改后的 jQuery 代码如下:
<script>
$(document).ready(function() {
setInterval(function (e) {
$('#gf').html("<%= escape_javascript render :partial =>
'microposts/micropost', :locals => {:microposts => @microposts } %>")},
10000);
});
</script>
不幸的是,从用户的角度来看,似乎什么都没有发生,但服务器每 10 秒显示一个 ajax 请求。
那么为什么我不能使用 ajax 轮询更新,并将更改应用到我的 _microposts 部分? $.get 在这种情况下使用正确的功能吗?尝试重新加载部分时,load() 方法的 url 是什么?
谢谢,
【问题讨论】:
标签: javascript jquery ruby-on-rails ajax polling