编程语言
首页 > 编程语言> > 从PHP进行Jquery AJAX调用后强制重定向

从PHP进行Jquery AJAX调用后强制重定向

作者:互联网

我有一个自定义框架,并且在我的请求文件中检测到一个请求是否是ajax.在我的基本控制器中,我检查用户是否登录:

If user is not logged in:
  1. if request is ajax - force JS redirect from PHP (unable to do)
  2. if request is not ajax - PHP redirect (header, works)

我不能让1号上班.

这是我的重定向代码:

//User::Redirect
public function redirect($url = SITE_URL, $isAjax = false) {
    if ($isAjax === true) {
        //its ajax call, echo js redirect
        echo '<script>window.location = ' . $url . ';</script>';
    } else {
        header("Location: {$url}");
    }
    exit;
}

登录检查代码:

//Basecontroller::__construct
if ( ! $this->user->isLoggedIn()) {
   //redirect to login page
   $this->user->redirect('/login', $request->ajax()); 
   exit;
}

但是,除了重定向ajax调用外,它只输出< script> window.location = URL< / script>

注意:

我知道我可以在每个AJAX调用上添加检查以从那里进行重定向,但是我试图避免这种情况,并让我的PHP脚本在基本控制器中进行检测并重定向,而不是将检查添加到所有AJAX调用(分配)中.

解决方法:

您的Javascript重定向需要脚本标签.尝试这个:

public function redirect($url = SITE_URL, $isAjax = false) {
    if ($isAjax === true) {
        //its ajax call, echo js redirect
        echo '<script>window.location = ' . $url . ';</script>';
    } else {
        header("Location: {$url}");
    }
    exit;
}

关于在ajax中处理此问题,假设使用jQuery

$.ajax(
    {
        type: "POST",
        url: url,
        data: postParams,
        success: function(data)
        {
            //do something with success response
        },
        error : function(httpObj, txtStatus)
        {
            if(httpObj.status == 401)
            {//redirect to login
                var loginUrl = '/login';
                document.location.href = loginUrl;
            }
            else if(httpObj.status == ...)  //etc
            {//do something

            }
            else
            {
                alert("Ajax\n Error: " + txtStatus + "\n HTTP Status: " + httpObj.status);
            }
        }

标签:http-redirect,php,jquery
来源: https://codeday.me/bug/20191030/1968895.html