RubyonRails:将JSON数据从服务器异步发送到客户端



背景和我的研究

我想在不重新加载浏览器页面的情况下将数据从服务器发送到客户端。我正在阅读Rails指南,使用JSON似乎很有希望。(如果我错了,请纠正我)。

2.2.8呈现JSON

JSON是许多AJAX库使用的JavaScript数据格式。轨道内置支持将对象转换为JSON并呈现JSON返回浏览器:

render:json=>@product您不需要对对象调用to_json要渲染的。如果使用:json选项,render将自动为您调用to_json。


问题

我希望能够在浏览器端重新呈现这个JSON对象。以下代码适用于该问题。

视频控制器

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_videoJSON对象。我该怎么做?

我想你需要一些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来显示和删除主页(因为你现在可以用show代替它),你需要将以前的代码更改为:

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

其中@video.next将返回下一个视频的id。

最新更新