2

我有带有牛仔和 angular.js 的 erlang Web 应用程序。

我启动了我的应用程序,在“/”中打开了浏览器,并得到了 main.html<input><button>。当我按下按钮时,我向服务器发送 httpPOST请求到/join/username带有 angular的服务器,在服务器上$http收到此POST请求并将重定向发送到浏览器:

{ok, Req4} = cowboy_req:reply(303, [{"Location", <<"/chat.html">>}], <<"">>, Req3)
{:ok, req4, State}

重定向响应标头:

 HTTP/1.1 303 See Other
 connection: keep-alive
 server: Cowboy
 date: Thu, 19 Sep 2013 14:36:01 GMT
 content-length: 0
 Location: /chat.html
 Cache-Control: no-store

发送重定向后,我从浏览器收到带有“/chat.html”路径的“GET”请求,没关系。我阅读了 chat.html 并将其发送回浏览器,但浏览器没有呈现它,并且浏览器中的 url 也没有改变。我在浏览器控制台中看到了 chat.html 200。

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

UPD 1。

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

谢谢你。

4

1 回答 1

0

您说您正在使用 Angular 的$http服务调用服务器。这意味着您正在进行 AJAX 调用。响应数据将发送到success您在构建$http调用时提供的回调。在这种情况下,您的响应数据将是您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并摆脱 Angular AJAX 调用。

于 2013-09-19T23:00:41.910 回答