Rails:如何为 redirect_to 设置 json 格式

Posted

技术标签:

【中文标题】Rails:如何为 redirect_to 设置 json 格式【英文标题】:Rails: how to set json format for redirect_to 【发布时间】:2013-02-24 14:13:00 【问题描述】:

如何不重定向到 html 格式,而是重定向到 json?

我想要这样的东西:

redirect_to user_path(@user), format: :json

但这不起作用,我仍然重定向到html路径。

【问题讨论】:

【参考方案1】:

我又读了一些 apidock... 这很简单。我应该像这样在路径助手中指定格式:

redirect_to user_path(@user, format: :json)

【讨论】:

如果这是在 format.js 请求中完成的,那么响应实际上不会重定向页面,它只是将 html 异步发送到浏览器。这是唯一的方法吗:***.com/questions/18629811/… @ajbraus JS 不是 JSON。您链接的问题/答案正在处理指定格式实际上是将执行的 javascript 的请求,而不是针对您响应 API 请求的情况(甚至可能来自支持 JavaScript 的客户端,例如 ios 应用程序) .【参考方案2】:

接受的答案(在 redirect_to 选项中指定 format: :json)在 Rails 5.2 API 应用程序中对我不起作用;带有Accept: application/json 标头的请求。

使用redirect_to "/foo", format: :json 会得到这样的响应(为简洁起见进行了编辑):

HTTP/1.1 302 Found
Content-Type: text/html; charset=utf-8
Location: /foo

<html><body>You are being <a href="/foo">redirected</a>.</body></html>

这不适用于 API,因此我完全没有使用 redirect_to,而是改用 head:

head :found, location: "/foo"

这会导致以下响应(再次,为简洁起见)而没有正文,这正是我想要的:

HTTP/1.1 302 Found
Content-Type: application/json
Location: /foo

在我的情况下,我没有重定向到我的 Rails 应用程序中的页面,所以我没有使用 URL 帮助程序,但如果你这样做(例如 user_pathredirect_to @user),你可以提供相关的您的 URL 助手的选项,如下所示:

head :found, location: user_path(user, format: :json)
# or
head :found, location: url_for(@user, format: :json)

【讨论】:

如果您指定 302 或除 304 之外的任何其他 3xx,用户代理可能会自动重定向到给定的 Location 标头。在我的例子中,我从 API 发送带有 Location 标头的 304,通过在前端检查这些数据将用户重定向到不同的页面。

以上是关于Rails:如何为 redirect_to 设置 json 格式的主要内容,如果未能解决你的问题,请参考以下文章

如何为多记录 Rails 表单中的复选框设置唯一 ID?

在 Rails 中将 redirect_to 格式更改为 :js

Rails redirect_to - 我也想重新加载页面

如何将redirect_to()与rails 3中当前params []数组中的所有内容一起使用?

如何为 Jruby Oracle 连接设置 SSL?

如何为 rspec 设置 ENV 变量?