我有牛仔和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
,它会正常重定向。为什么呢?
谢谢。
答案 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调用。