ruby-on-rails - 在 Controller 中渲染 JSON

当我在阅读一本书和关于 Controller 的一章时,它谈到了渲染的东西,对于 JSON,它有一个这样的例子,但没有详细说明,所以我无法弄清楚这个例子的更大图景适合:

render :json => @projects, :include => tasks

还有一些将 JSONP 与回调函数结合使用的示例:

render :json => @record, :callback => 'updateRecordDisplay'

谁能解释一下?

最佳答案

您通常会返回 JSON要么是因为:

A) 您正在将部分/全部应用程序构建为单页应用程序 (SPA),并且您需要客户端 JavaScript 能够在不完全重新加载页面的情况下提取额外数据。

B) 您正在构建一个第三方将使用的 API,并且您已决定使用 JSON 来序列化您的数据。

或者,您可能正在吃自己的狗粮,并且两者都做

在这两种情况下,render :json => some_data 都会对提供的数据进行 JSON 化处理。第二个示例中的 :callback 键需要更多解释(见下文),但它是同一想法的另一种变体(以 JavaScript 可以轻松处理的方式返回数据。)

为什么是:callback

JSONP(第二个例子)是绕过 Same Origin Policy 的一种方式。这是每个浏览器内置安全性的一部分。如果您的 API 在 api.yoursite.com 并且您将通过 services.yoursite.com 为您的应用程序提供服务,那么您的 JavaScript 将无法(默认情况下)从 servicesapi 发出 XMLHttpRequest (XHR - aka ajax) 请求。人们绕过这个限制的方法(在 Cross-Origin Resource Sharing spec was finalized 之前)是通过从服务器发送 JSON 数据就好像它是 JavaScript 而不是 JSON)。因此,而不是发回:

{"name": "John", "age": 45}

服务器会发回:

valueOfCallbackHere({"name": "John", "age": 45})

因此,客户端 JS 应用程序可以创建一个 script 标签指向 api.yoursite.com/your/endpoint?name=John 并拥有 >valueOfCallbackHere 函数(必须在客户端 JS 中定义)调用来自其他来源的数据。)

https://stackoverflow.com/questions/14824551/

相关文章:

.net - 您的项目未引用 ".NETFramework,Version=v4.5"框架。

mysql - MYSQL 5.7 中的原生 JSON 支持 : what are the pros

c# - 如何在asp.net mvc中展平通过JsonResult返回的ExpandoObject

python - JSON中的单引号和双引号

json - 如何在屏幕上显示 JSON 表示而不是 [Object Object]

javascript - Angular 2 : How do you render HTML fr

javascript - 在 JSON 中,为什么要引用每个名称?

javascript - 移除 JSON 元素

javascript - JSON.parse 与 eval()

python - 使用 Django 1.7+ 和数据迁移加载初始数据