2015-09-04 66 views
2

Rails 3中,JRuby的Ajax的局部刷新通過查詢Rails 3中,jQuery的

我最近參加了在jQuery的快速速成班,其中包括一點ajax的部分呈現的。這讓我想到了,我是否可以使用這個來輪詢使用setInterval()的Rails服務器,每隔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()方法的網址是什麼?

感謝,

回答

2

希望這將有助於任何人誰願意使用ajax-特別是如果你跟隨邁克爾·哈特爾的教程來學習Ruby on Rails的初學者刷新的部分。以下是我如何解決我的問題。

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

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

我需要寫在微柱控制器將與上述Javascript成爲這基本上提供給刷新部分所需的信息對應的方法。它基本上是micropost控制器中我的索引方法的簡化版本,並避免執行不需要的部分我想刷新的附加代碼。

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文件,允許網頁瀏覽器打電話給我投票的方法,使用GET請求,而不會導致路由錯誤。我正在使用member do塊,因爲請求正通過請求傳遞current_user id。

resources :microposts do 
    member do 
     post :polling 
    end 
end