ajax - 浏览器不重定向

标签 ajax http redirect erlang cowboy

我有带有 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/

相关文章:

javascript - 如何动态改变js代码?

javascript - Ajax 错误请求 400 Rails

java - 如何优雅地检测 SSL

c++ - HTTP 输入流类 (C++)

apache - 将 http 重定向到 APACHE 站点中某个页面的 https

javascript - 如何访问使用 ajax 和 javascript 创建的输入元素数组并获取这些单独的值

php - 使用 Javascript 和 Ajax 的手机无限滚动

java - 如何测量 html 页面的长度并有条件地重定向到主页

windows - 构建windows服务时如何选择使用哪个端口? ( Windows 和.net)

.htaccess - http.conf 将 example.com/foo/bar 重定向到 example.com/foo?id=bar