【问题标题】:Ruby on Rails: Send JSON data from server to client asynchronouslyRuby on Rails:将 JSON 数据从服务器异步发送到客户端
【发布时间】:2012-09-30 20:53:42
【问题描述】:

背景和我的研究

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

2.2.8 渲染 JSON

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

render :json => @product 你不需要在对象上调用 to_json 你想要渲染的。如果您使用 :json 选项,渲染将 自动为你调用 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_video JSON 对象。我该怎么做?

【问题讨论】:

  • params[:id] 是否可用于 home 操作?
  • 有什么理由不关注 REST?
  • 出于用户体验的原因。我想在不重新加载页面的情况下从一个视频更改为另一个视频,因为用户可能正在页面上填写表单。

标签: ruby-on-rails ajax json


【解决方案1】:

我猜你需要一些 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 来重命名 next 来显示和删除主页(因为您可以用 show now 替换它)并且您需要将以前的代码更改为:

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

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

【讨论】:

    猜你喜欢
    • 2018-04-27
    • 2013-04-11
    • 2021-12-07
    • 2016-02-21
    • 2023-03-08
    • 1970-01-01
    • 2021-10-03
    • 2013-11-16
    • 2012-08-29
    相关资源
    最近更新 更多