【问题标题】:Angular refresh browser on redirect重定向时的角度刷新浏览器
【发布时间】:2015-06-14 11:46:06
【问题描述】:

当运行angularjs 应用程序时,用户访问可能会从服务器端撤回。在这种情况下,每个请求都会导致 http 302 重定向和登录 html(非部分)页面。由于 Angular 确实期望它所请求的任何内容,以防仍然给予访问权限,因此它会中断,因为它可能期望一个 json 字符串但会获取 html 登录页面。

我能做些什么来捕捉这个事件(监听重定向,确定是否返回 html 等)并对重定向 URL 进行“硬”刷新?

【问题讨论】:

    标签: javascript angularjs authentication http-redirect


    【解决方案1】:

    由于您无法干扰 ajax 302 响应并重定向到错误页面,因此您需要有一点创意。

    您可以为相关响应添加标头或不同的响应代码,并在客户端添加拦截器。
    拦截器是每个 ajax 请求\响应都会经过的模块。
    您可以添加将查找该标头的代码并在登录页面上简单地执行 $window.location.href

    阅读here 了解拦截器。
    检查 this 示例 - 它处理 401 响应。

    【讨论】:

    • +1 这可能比检查数据结果是否为 html 页面更简洁。只能接受一个答案,但还是谢谢。
    • @orange - 我不在乎接受的答案,但这样做 Nano 的方式并不是真正的好方法(即使它有效)。您需要一种方法来识别未经授权的请求并进行通用处理——这意味着您必须使用客户端拦截器。现在我不知道你在你的服务器上做什么,但你不想像某些服务器端框架(.net 的表单身份验证)那样出现 302 错误。您只想返回 401 并在客户端重定向。
    • 同意,我在@Nano 的回答中添加了一条评论,将读者指向客户端拦截器。
    【解决方案2】:

    如果我没听错的话,你说的是来自 AngularJS 的 $http 服务。

    如果是这样,您可以自己转换响应并检查其是否有效 JSON,如下所示:

    $http({
        url: '...',
        method: 'GET',
        transformResponse: function (reponse) {
            var ret = [];//if the return stays empty, the repsonse may be HTML
            try {
                ret = JSON.parse(reponse);
            } catch (error) {
                //here you could check for the error
            }
            return ret;
        }
    }).success(function(answer){
        if(answer.length === 0){//its empty, so its probably HTML
            $window.location.reload();//refresh page here
            return;
        }
        //its JSON with content!
    });
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 2018-12-13
    • 2015-02-18
    • 1970-01-01
    相关资源
    最近更新 更多