Rails 3中的Ajax轮询部分刷新



Rails 3, JRuby

我最近参加了一个jQuery速成班,其中包括一些ajax部分呈现。这让我想到,我可以用它来轮询Rails服务器使用setInterval(),每x秒刷新我的页面的特定部分不断?

我遇到的问题是我如何使用$.get()方法来抓取部分的url并使用load()重新加载它。这就是混乱开始的地方-使用Rails 3,我有一个名为"_microposts"的部分,在一个div中呈现,'id= ' gf ' ' (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>

这看起来是错误的,到目前为止,只是空白我的_microposts部分10秒后(所以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是什么?

谢谢,

希望这将帮助任何人谁想要使用ajax刷新部分-特别是如果你是一个初学者按照Michael Hartl的教程学习Ruby on Rails。我是这样解决我的问题的。

首先,我创建了一个单独的.js。微博视图文件夹中名为poll .js的Erb文件。Erb’,它将刷新全局提要部分。

$('#gf').html("<%= escape_javascript render :partial =>
                            'microposts/micropost', :locals => {:microposts => @mps} %>"); 

我需要在微帖子控制器中编写一个与上述javascript相对应的方法—这实际上提供了刷新部分所需的信息。它基本上是我在微帖子控制器中的index方法的简化版本,避免了执行我想要刷新的部分不需要的额外代码。

def polling
    @mps = Micropost.all #add some paginate code if you wish
    @micropost = current_user.microposts.build(params[:micropost])                  
end

然后我修改了我的javascript代码,因为我想每5秒调用一次轮询方法,加载特定于我的webapp的current_user的信息。

$(document).ready(function() {
    setInterval(function () {
            $.ajax('microposts/<%= current_user.id %>/polling');
    } , 5000);          
}); 

最后,我更新了我的路线。Rb文件允许web浏览器调用我的轮询方法,使用get请求,而不会导致路由错误。我使用member do块,因为请求通过请求传递current_user id。

resources :microposts do
    member do
        post :polling
    end
end

相关内容

  • 没有找到相关文章

最新更新