Ajax 浏览器没有';t重定向

Ajax 浏览器没有';t重定向,ajax,http,redirect,erlang,cowboy,Ajax,Http,Redirect,Erlang,Cowboy,我有一个带有cowboy和angular.js的erlang web应用程序 我启动了我的应用程序,在“/”中打开浏览器,并使用和获取main.html。当我按下按钮时,我将httpPOST请求发送到服务器,并使用$http将httpPOST请求发送到浏览器: {ok, Req4} = cowboy_req:reply(303, [{"Location", <<"/chat.html">>}], <<"">>, Req3) {:ok, req4,

我有一个带有cowboy和angular.js的erlang web应用程序

我启动了我的应用程序,在“/”中打开浏览器,并使用
获取main.html。当我按下按钮时,我将http
POST
请求发送到服务器,并使用
$http
将http
POST
请求发送到浏览器:

{ok, Req4} = cowboy_req:reply(303, [{"Location", <<"/chat.html">>}], <<"">>, Req3)
{:ok, req4, State}
在发送重定向后,我从浏览器中得到了“/chat.html”路径的“GET”请求,没问题。我阅读chat.html并将其发送回浏览器,但浏览器不会呈现它,并且浏览器中的url也不会更改。我在浏览器控制台中看到chat.html 200

为什么浏览器不呈现新页面-
chat.html

UPD 1.

如果我在浏览器中手动键入
/join/username
,它将正常重定向。为什么?


谢谢。

您说您正在使用angular的
$http
服务呼叫服务器。这意味着您正在进行AJAX调用。响应数据被发送到构建
$http
调用时提供的
success
回调。在这种情况下,您的响应数据将包含在
chat.html
文件的有效负载中:

$http({method: 'POST', url: '/join/username'}).
  success(function(data, status, headers, config) {
    // data will be the content from chat.html
  });
当浏览器作为正常导航流程的一部分发出请求时,它只会明显地遵循重定向。AJAX请求确实遵循重定向,但结果不会显示在浏览器窗口中,而是返回到代码中。这就是为什么在浏览器中键入地址对您有效

如果你想遵循这个重定向,你可以简单地让你的HTML表单直接提交
/join/username
,然后摆脱AJAX调用

$http({method: 'POST', url: '/join/username'}).
  success(function(data, status, headers, config) {
    // data will be the content from chat.html
  });