在Ajax调用上使用PHP重定向

时间:2016-01-15 11:17:14

标签: php jquery ajax redirect

我有一个通过AJAX调用提交的表单,该表单发送到名为function.php的PHP文件。这就是我的AJAX调用:

$.ajax({
    type:  'post',
    cache:  false ,
    url:  'function.php',
    data: noteSequence,
    success: function(data) {
        alert(data);

        <?php
            if (defined('RESTRICTED')) {
                if (!isset($_SESSION['logged'])) {
                    header( 'Location: index.php' );
                    exit();
                }
             }
        ?>
    }
});

在PHP文件中,我有这个if语句。如果这是真的,我希望页面重定向到index.phpheader()无法正常工作。在AJAX成功之后我尝试了window.location.href = 'index.php';,但无论PHP语句是否为真,这都会重定向。目前我正在尝试使用会话来重定向用户但这不起作用。那么有人可以提供解决方案吗?

PHP代码:

if ($rows == 1) { 
    $_SESSION['logged'];
}

2 个答案:

答案 0 :(得分:1)

在您的function.php中执行您的操作,然后在发送响应的末尾添加以下行

$login_status = false;
if (defined('RESTRICTED')) {
    if (!isset($_SESSION['logged'])) {
        $login_status = true;
    }
}

$response = array();
$response['login_status'] = $login_status;

echo json_encode($response);

在你的JS代码中:

$.ajax({
    type:  'post',
    cache:  false ,
    url:  'function.php',
    data: noteSequence,
    success: function(data) {
        data = JSON.parse(data);
        if(data['login_status']) {
            location.replace("index.php")
        } else {
            //do something else
        }
    }
});

答案 1 :(得分:0)

如果您希望浏览器重定向,则标头不会影响ajax调用的浏览器状态,浏览器也不会导航标头上的地址。相反,您应该使用客户端方法重定向浏览器,如下所示,

$.ajax({
    type:  'post',
    cache:  false ,
    url:  'function.php',
    data: noteSequence,
    success: function(data) {
        if (data.notloggedin)
            window.location.href = data.href;
        else
            //Your business
    }
});

编辑:您应该在我的示例代码中正确返回数据以进行ajax调用需要json结果中的href属性。您应该编辑与“data”

相关的ajax结果的行为

你需要为php.php提供类似下面的php代码但是请注意你应该参数化你对function.php的请求,否则它只能用于检查用户的会话。

<?PHP

header('Content-Type: application/json; charset=utf-8');
$myAjaxResult = array();
$myAjaxResult["notLoggedIn"] = true;
if (defined('RESTRICTED')) {
    if (!isset($_SESSION['logged'])) {
        $myAjaxResult["notLoggedIn"] = true;
    }
    else {
        $myAjaxResult["notLoggedIn"] = false;
    }
}
echo json_encode($myAjaxResult);

?>