2012-09-30 33 views
1

背景和我的研究Ruby on Rails的:從服務器發送JSON數據到客戶端異步

我想從服務器發送數據到客戶端,而不在瀏覽器重新加載頁面。我正在閱讀Rails guide並使用JSON看起來很有希望。 (糾正我,如果我錯了)。

2.2.8渲染JSON

JSON是由許多AJAX庫使用一個JavaScript數據格式。導軌 有內置的支持對象轉換成JSON和渲染 JSON回瀏覽器:

渲染:JSON => @product你並不需要調用to_json要渲染的對象 上。如果您使用:json選項,則渲染將自動爲您調用to_json。


問題

我希望能夠呈現此JSON對象早在瀏覽器端。以下是適用於該問題的代碼。

VideosController

class VideosController < ApplicationController 
    include VideosHelper 

    def home 
    @video = Video.last 
    end 

    def next 
    @next_video = next_video(params[:id]) 
    render :json => @next_video 
    end 
end 

next.json.erb

{ 
    "title": "<%= @video.title %>" 
    "url": "<%= @video.url %>" 
    "youtube_id": "<%= @video.youtube_id %>" 
    "genre": "<%= @video.genre %>" 
    "category": "<%= @video.category %>" 
    "likes": "<%= @video.likes %>" 
    "dislikes": "<%= @video.dislikes %>" 
    "views": "<%= @video.views %>" 
    "user_id": "<%= @video.user_id %>" 
    "created_at": "<%= @video.created_at %>" 
    "updated_at": "<%= @video.updated_at %>" 
} 

如果我想渲染上home行動@next_video JSON對象。我該怎麼做呢?

+0

Will params [:id]可在主頁上使用嗎? –

+0

是的,我可以做到這一點。 –

+0

你沒有遵循REST的原因? –

回答

0

我想你需要一些js處理程序。類似的東西在home.html.erb:

$.ajax({ 
    url: '<%= next_video_path(@video.id) %>', 
    type: "GET", 
    dataType: "json", 
    success: function(data) { 
    // something brilliant here 
    } 
}) 

也next.json.erb你應該改變@video到@next_video(因爲你有沒有在接下來的動作@video初始化)。另外一個建議 - 你可以使用REST那些重命名旁邊顯示和刪除回家(因爲你可以立即顯示替換它),你需要將以前的代碼更改爲:

$.ajax({ 
    url: '<%= video_path(@video.next) %>', 
    type: "GET", 
    dataType: "json", 
    success: function(data) { 
    // something brilliant here 
    } 
}) 

凡@ video.next會返回下一個視頻的ID。

+0

謝謝。我會閱讀jquery的ajax方法獲取。 –

相關問題