2012-07-20 28 views
5

Tôi đã tìm thấy một số câu hỏi và câu trả lời liên quan đến việc cập nhật một phần bằng cách sử dụng Ajax sau khi gửi biểu mẫu. Nhưng câu hỏi của tôi là đơn giản hơn ?, Tôi chỉ muốn tải lại một phần mỗi vài giây và tải dữ liệu mới. Điều này thực sự không thể được khó khăn ở tất cả, và tôi nhớ làm một cái gì đó tương tự trong Rails 2.3 nhưng tôi không thể tìm thấy câu trả lời bất cứ nơi nào.Cập nhật Rails 3 một phần bằng AJAX (không phải mẫu)

Về cơ bản, tôi có một show.html.erb rendering một phần như vậy:

<div id="latest_post"> 
    <%= render :partial=>'info/latest', :object=>@user, :as=>:user %> 
</div> 

Các tập tin một phần nằm ở app/views/info/_latest

<% post = user.posts.last %> 
<h1>Last Post</h1> 
<p><%= post.content %></p> 

Tôi chỉ muốn div mới nhất được cập nhật sau mỗi 30 giây. Hãy giúp tôi!

+0

Idea nhanh của bạn: Nếu bạn sử dụng jQuery thay vào đó, chạy một thời gian tại e rất 30 giây (setInterval?), Và chỉ cần thay thế các nội dung? –

+0

@BenjaminTan Cảm ơn, tôi đã biết về phần setInterval và jQuery, nhưng đã cố gắng hiểu những gì để gọi bằng cách sử dụng các phương thức AJAx của jQuery. – you786

Trả lời

4

Vâng nó quay ra câu trả lời là một chút phức tạp:

Bước 1: setInterval chức năng sử dụng JavaScript cùng với $.get() chức năng của jQuery để load một trang, nói /users/1/posts/latest.

setInterval(function(){ 
    $.get("https://stackoverflow.com/users/1/posts/latest.js", function(data){ 
    $("latest_post").html(data); 
    }, 
    "html") 
}, 30000); 

Bước 2: Tạo latest.js.erb và đặt trong thư mục app/views/posts của bạn.

Nội dung latest.js.erb:

<%= render partial: 'posts/latest', object: @user.posts.last, as: :post %> 

Bước 3: Tạo một phần trên với bất cứ điều gì bạn muốn (nếu bạn không cần phải có một phần, bạn chỉ có thể viết toàn bộ nội dung của div trong latest.js.erb file.)

Bước 4: Thêm phương thức mới nhất vào số PostsController, định nghĩa @user, v.v ... để sử dụng latest.js.erb.

Bước 5: Thêm get '/latest'-routes.rb

+0

Bạn đã đặt hàm 'setInterval()' ở đâu? application.js? Hoặc trong trang, một phần của bạn được hiển thị trong? – aguazales

+0

Cũng có một số ý kiến ​​khác nhau về điều này tôi nghĩ, nhưng tôi đã sử dụng content_for: đầu trên trang một phần được hiển thị trên để xuất javascript tôi cần cho trang đó. – you786

+0

Xin chào! Tôi cũng đã tạo khuôn mẫu cho giải pháp của mình trên một [vấn đề] tương tự (https://stackoverflow.com/questions/48520865/refreshing-a-rails-partial-on-a-set-time-interval-using-ajax-and-jquery/ 48521196? Noredirect = 1 # comment84052148_48521196) mà tôi đang gặp và tôi tự hỏi liệu có cách nào để setInterval được gọi khi người dùng chỉ xem trang hiện tại (cần được làm mới) không? Tôi nhận thấy rằng _refresh_ luôn được gọi bất kể bạn đang ở trang nào. – Whooper

Các vấn đề liên quan