簡體   English   中英

通過Rails 3中的輪詢進行Ajax部分刷新,jQuery

[英]Ajax Partial Refresh by Polling in Rails 3, jQuery

Rails 3,JRuby

我最近參加了jQuery的快速速成課程,其中包括一些ajax部分渲染。 這讓我思考,我可以使用它來使用setInterval()輪詢Rails服務器,每x秒一次刷新我頁面的特定部分嗎?

我遇到的問題是如何使用$.get()方法獲取部分的url並使用load()重新加載它。 這就是混亂開始的地方 - 使用Rails 3,我有一個部分稱為“_microposts”,在div中呈現'id =“gf”'(gf表示全局Feed)。 這發生在我的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會是什么?

謝謝,

希望這將有助於任何想要使用ajax刷新部分的人 - 特別是如果你是邁克爾哈特的教程,學習Ruby on Rails的初學者。 這就是我設法解決問題的方法。

首先,我在微博視圖文件夾中創建了一個單獨的.js.erb文件,名為'polling.js.erb',它將刷新全局Feed部分。

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

我需要在微博控制器中編寫一個與上述javascript相對應的方法 - 這實際上提供了刷新部分所需的信息。 它基本上是微博控制器中我的索引方法的簡化版本,並且避免執行我想要刷新的部分不需要的附加代碼。

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);          
}); 

最后,我更新了routes.rb文件,以允許Web瀏覽器使用get請求調用我的輪詢方法,而不會導致路由錯誤。 我正在使用member do阻止,因為請求通過請求傳遞current_user id。

resources :microposts do
    member do
        post :polling
    end
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM