奇怪的重定向错误(POST重定向到同一页面不会更新)

时间:2015-09-22 23:55:35

标签: html node.js http redirect http-headers

我目前有一个POST请求,无论如何都会在响应标头中设置位置,以便再次转到完全相同的页面。

1)我点击登录。如您所见,该位置设置为/,在这种情况下,该页面是同一页面。请求由服务器处理,然后通过位置字段的重定向设置在响应头中。

enter image description here

2)下面是与登录页面相同地址的获取请求(不要与只接收带登录凭据的帖子的/auth/local混淆)。由于节点中的路由,/在登录时是不同的页面。

enter image description here

3)如下所示,预览显示了对请求的响应的html,该请求由post请求的响应启动。它与实际浏览器显示的初始登录页面不同。它似乎没有更新浏览器?

enter image description here

时间轴:

enter image description here

我也在运行Angular:

main.js

angular.module('myApp', [])
    .controller('publicHomeCtrl', ['$scope', '$http', function ($scope, $http) {
        $scope.submit = function (event) {
            var data = {
                email: $scope.email,
                password: $scope.password
            };
            $http.post('/auth/local', data).success(function () {
                console.log('success');
            });
            event.preventDefault();
        };
        $scope.submit2 = function () {
            var data = {
                email: $scope.email,
                password: $scope.password
            };
            $http.post('/auth/local', data).success(function () {
                console.log('success');
            });
        };
}]);

登录HTML

<div class="container" data-ng-controller="publicHomeCtrl">
    <form method="post" role="form" ng-submit="submit($event)">
        <input type="email" data-ng-model="email" placeholder="your@email.here" class="form-control">
        <input type="password" data-ng-model="password" placeholder="password" class="form-control">
        <button type="submit" class="btn btn-success">sign in 1</button>
    </form>
    <button ng-click="submit2()">sign in 2</button>
</div>

我怀疑是因为我在客户端的http.post有一个回调它取消了实际更新视图的响应头中的重定向?

1 个答案:

答案 0 :(得分:1)

无法相信我们错过了这一点。

当从ajax调用返回302时,浏览器不会将当前页面更改为新位置。相反,它获取新位置的内容并将其返回到Ajax调用,这不是您想要的。

如果您希望浏览器页面在ajax调用后重定向,那么您必须自己在客户端的ajax响应处理程序中编写代码。我建议不要使用302.只需返回正常的200并返回一些JSON,告诉客户下一步该做什么。如果客户端获得重定向指令,则可以将window.location本身设置为JSON中返回的新URL。