【问题标题】:"Res.redirect" Not Working when making Ajax call from React to Node?从 React 到 Node 进行 Ajax 调用时,“Res.redirect”不起作用?
【发布时间】:2018-04-04 07:35:27
【问题描述】:

在客户端我对节点进行 ajax 调用

const res = await axios.post('/api/stripe', toPost);

其中 'toPost' 是一个对象,其中包含我在后端需要的一堆键值对。

在后端做了一些操作后,我想将用户重定向到“谢谢”页面。所以我想我可以用一些简单的东西来结束回复

res.redirect('/thankyou');

虽然这显示在开发人员工具的网络选项卡中,状态码为 200。但没有任何反应。

非常感谢您的帮助。

【问题讨论】:

  • 我认为您将无法从 ajax 请求中跟踪重定向,请尝试在您的响应中设置某种标志并执行 window.location.href 如果标志设置在客户端。
  • 我同意 Akhil 的观点,即您不能在 ajax 请求中间进行服务器重定向。如果您正在使用 React(正如您的标题所暗示的那样),那么无论如何您都不应该进行服务器端重定向。这会不必要地中断应用程序的流程。我建议你在应用程序中使用 React Router,然后在完成后渲染 组件:reacttraining.com/react-router/web/api/Redirect

标签: node.js reactjs


【解决方案1】:

您将无法使用服务器重定向来重定向 React 客户端 javascript。

在客户端试试这个:

axios.post('/api/stripe', toPost)
.then( (response) => {
  if (response.ok && window){ 
    window.location.href="/thankyou"; 
    // or <Redrect to="/thankyou" /> if you are using react-router
  }
})

【讨论】:

  • 太棒了,伙计。多谢。所有工作。最终选择了 res.redirect。
  • 你把&lt;Redirect /&gt;放在哪里,因为你不能在那里放一个表达式,它应该是一个函数调用或赋值?
  • &lt;Redirect /&gt; 应该在另一个组件中呈现(参考docs)。上面的例子是 REST 响应后触发的回调;根据您的设置,&lt;Redirect /&gt; 的放置位置可能会有所不同。在then 里面你可以使用history.push
【解决方案2】:

您可以做的事情是在 ajax 调用答案 setRedirect(true) 中,然后在渲染中放置一个 {redirect &amp;&amp; &lt;Redirect to='/thankyou ' /&gt;} 或者正如 Max Gram 告诉你的那样,使用 history.push('/thankyou')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2017-11-26
    相关资源
    最近更新 更多