我希望在 Rails 应用程序中对某些资源实施内容协商。我正在使用 Mootools,并且可能能够将 XMLHTTPRequest 接受的内容类型调整为“application/json”。
有没有办法在我的控制器中获取这些信息并生成 JSON 响应而不是 XHTML?
我试图避免做类似的事情:
http://site/resource/1?format=JSON
...因为它弄脏了我的 URL,强加了一定程度的冗余并且不那么灵活。
谢谢!
我希望在 Rails 应用程序中对某些资源实施内容协商。我正在使用 Mootools,并且可能能够将 XMLHTTPRequest 接受的内容类型调整为“application/json”。
有没有办法在我的控制器中获取这些信息并生成 JSON 响应而不是 XHTML?
我试图避免做类似的事情:
http://site/resource/1?format=JSON
...因为它弄脏了我的 URL,强加了一定程度的冗余并且不那么灵活。
谢谢!
http://site/resource/1.json不正确使用内容协商。关键是 URL 应该保持不变,但客户端会根据随请求发送的 HTTP 标头请求特定的表示形式(JSON、PDF、HTML 等)。
您可以在控制器方法中使用respond_to
节,如下所示:
respond_to do |format|
format.html { # Generate an HTML response... }
format.json { # Generate a JSON response... }
end
Rails 根据客户端提交的 HTTP Accept 标头的值确定响应格式。
当然http://site/resource/1.json应该可以工作吗?你可能需要在你的 Rails 环境中设置它,不过,这取决于你所拥有的 Rails 版本的最新程度,我对此表示怀疑。
经过大量研究,虽然 rails 拥有自动选择输出模板的所有功能,但它仍然需要为您希望支持的每个模板调用respond_to 。