Yii2中redirect ajax请求不跳转

18-04-03 11:23 字数 829 阅读 1225

现有逻辑是后台不登录的情况下所有请求都跳转到登录页。

public function beforeAction($action)
{
    if (Yii::$app->user->getIsGuest() && !in_array($action->id, self::$ignoreList)) {
        $this->redirect(Yii::$app->user->loginUrl);
    }
    return parent::beforeAction($action);
}

这么写在不是ajax请求的情况下是好用的。但是如果是ajax请求,这么写就不行了。所以修改如下。

public function beforeAction($action)
{
    if (Yii::$app->user->getIsGuest() && !in_array($action->id, self::$ignoreList)) {
        $this->redirect(Yii::$app->user->loginUrl)->send();
    }
    return parent::beforeAction($action);
}

加上send方法后发现ajax请求竟然正常跳转了,这特么太神奇了啊。后来发现YII2在相应体中放了一个X-Redirect,值就是登录地址。

那么浏览器是怎么根据这个X-Redirect跳转的呢。我并没有写跳转的代码。

后天来查阅文档发现,只要你引入了·yii.js,那么这货会帮你过滤所有的ajax请求。

function initRedirectHandler() {
    // handle AJAX redirection
    $(document).ajaxComplete(function (event, xhr) {
        var url = xhr && xhr.getResponseHeader('X-Redirect');
        if (url) {
            window.location.assign(url);
        }
    });
}

这个js里封装了一些常用的函数,还是挺方便的。

0人点赞>
关注 收藏 改进 举报
0 条评论
排序方式 时间 投票
快来抢占一楼吧
请登录后发表评论