当我在阅读一本书和关于 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 将无法(默认情况下)从 services
向 api
发出 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
json - 如何在屏幕上显示 JSON 表示而不是 [Object Object]
javascript - Angular 2 : How do you render HTML fr
javascript - 在 JSON 中,为什么要引用每个名称?