[英]Rails 4 jQuery / Ajax to refresh and add item to partial after create
[英]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.