浏览器不会重定向

时间:2013-09-19 14:43:16

标签: ajax http redirect erlang cowboy

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

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

POST

重定向响应标头:

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

发送重定向后,我通过“/chat.html”路径从浏览器收到“GET”请求,没关系。我阅读了chat.html并发回了浏览器,但是浏览器没有呈现它,并且网址在浏览器中没有变化。我在浏览器控制台中看到了chat.html 200。

为什么浏览器无法呈现新页面? 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

UPD 1。

如果我手动在浏览器中输入chat.html,它会正常重定向。为什么呢?

谢谢。

1 个答案:

答案 0 :(得分:0)

您说您正在使用角色的$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调用。