我正在开发一个登录应用程序,我在其中与REST接口进行角度通信以验证用户。我是这个任务的$ http。现在,我需要将我的页面重定向到另一个URL(这可能在相同或不同的域上)。另外,我需要在此过程中设置标题。
请帮我完成一项实施,以便继续执行此任务。
答案 0 :(得分:5)
1)AngularJs旨在构建SPA,您不应该重定向到另一个URL。您应该重定向到当前页面中的另一个路径。如果您使用的是angular router,则会重定向到另一个状态。请查看此信息以获取更多信息:single page application deep linking with login page
2)因为浏览器会自动处理302响应并强制您的ajax函数向位置发送另一个ajax请求以检索状态为200的最终结果。您的服务器应返回 401 < / strong>而不是用户未经授权。 Cannot handle 302 redirect in ajax and why?
客户端的示例代码,用于处理401状态代码(未授权):
$rootScope.$on('$stateChangeError', function(event, toState, toParams, fromState, fromParams, error){
if (error.status == 401) { // check for 401 status code
$state.transitionTo("login", { returnUrl: $location.url() });
}
})
另一个带有$ http的示例代码,我建议在interceptors
中全局执行此操作$httpProvider.interceptors.push(function($q, $location) {
return {
'responseError': function(response) {
if(response.status === 404){
$location.path('your redirection path');
}
return $q.reject(response);
}
};
});
3)为了设置您的请求标头,您可以在$httpProvider.defaults.headers或per request
中全局设置答案 1 :(得分:-2)
您是否考虑过阅读Angular documentation / API?
使用$location服务进行重定向并阅读$ http文档,以了解如何设置标题。
引用:
$ http服务会自动为所有请求添加某些HTTP标头。可以通过访问$ httpProvider.defaults.headers配置对象[...]
来完全配置这些默认值
SO社区的任何人都不太可能提供您问题的完整指南,因为所需的信息很容易获取。
答案 2 :(得分:-3)
如果您需要转到其他页面,请使用直接java脚本
window.location.href=......