我有带有 cowboy 和 angular.js 的 erlang web 应用程序。
我启动了我的应用程序,在“/”中打开浏览器并使用 <input>
获得了 main.html和 <button>
.当我按下按钮时,我发送 http POST
向服务器请求 /join/username
有角度的 $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
发送重定向后,我收到来自浏览器的“GET”请求,路径为“/chat.html”,没问题。我阅读了 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
并摆脱 Angular AJAX 调用。
关于ajax - 浏览器不重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18897813/