我的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中完成。
答案 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";
});
}
} ]);