如何更新我的浏览器,因为我的angularjs控制器收到HTTP 303

时间:2014-12-11 18:35:45

标签: angularjs http-redirect http-status-code-303

我的RestEasy代码调度了对angularjs控制器的303响应。此外,Chrome网络调试显示收到了HTTP 303并且加载了新URL(显示为HTTP 200) - 但从未显示过!

如果我尝试直接从浏览器调用RestEasy-endpoint,它会很好地重定向!

但是,唉,我的angularjs控制器似乎无法更新浏览器 - 它仍然放在同一页面上!

这是我的angularjs控制器:

var mod = angular.module('login', []);
mod.controller('RestController', [
        '$http',
        '$scope',
        function($http, $scope) {

            $scope.submit = function(v1, v2) {
              $http.post("rest/login/submit", {
                  param1 : v1,
                  param2    : v2
                }).success(function(data, status, headers, config) {
                    $scope.submitmsg = "";

            }).error(function(data, status, headers, config) {
                $scope.submitmsg = "Error...";
            });
        }
    } ]);

我的问题很简单:我应该做一些特别的事情来处理浏览器页面的更新。也许设置一些$ scope变量或$ doc或者什么?或者我应该在error() - 函数的一部分 - 中处理303代码吗?

感谢任何帮助。所有测试都在Chrome中完成。

2 个答案:

答案 0 :(得分:1)

303响应代码不应该真正用于单页面应用程序。它在角度框架之前由浏览器处理。

您应该返回相应的错误代码而不是3xx重定向命令;服务器出错时为5xx,未经授权时为401等。

如果这应该是全局异常处理者或仅仅是控制器特定的,那么实际上取决于应该采取的行动。根据可用的信息,我建议对应用程序进行全局处理,该应用程序将使用 $ location.path重新定向用户(&#34; ...&#34;); < / p>

答案 1 :(得分:1)

从您的终端发送HTTP 303不是一个好主意。我认为它可能会被浏览器截获。更好的选择是返回有关要重定向到的URL的信息(以及适当的HTTP响应 - 可能是200或400或其他),并使用$ window.location.href执行重定向:

var mod = angular.module('login', []);
mod.controller('RestController', [
        '$http',
        '$scope',
        '$window',
        function($http, $scope,$window) {

            $scope.submit = function(v1, v2) {
              $http.post("rest/login/submit", {
                  param1      : v1,
                  param2    : v2
                }).success(function(data, status, headers, config) {
                    $window.location.href = "http://host:port/path"
                }).error(function(data, status, headers, config) {
                    $scope.submitmsg = "error";
                });
            }
        } ]);