如何在getJSON调用中重定向用户?

时间:2014-02-05 00:02:31

标签: php jquery json getjson

我从外部呼叫接收json文件。如果json带有空值(如果用户会话已过期,则可能),则应将用户重定向到logout.php页面。在我当前的调用中,logout.php数据不是重定向,而是作为json响应接收。

那么,当json数据为空时,如何重定向用户?

$.getJSON(sSource, aoData, function (json) {
    if(json !== null) {
        fnCallback(json);
    } else {
        window.location.href = "logout.php";
    }
});

感谢@ Ron的观察我注意到,虽然sSource正在调用正确的文件(datatables.php),但它的标头没有检测到请求方法,因此返回错误的数据:

if(($_SESSION['login_expire'] + $session['expiration_time']) < time()) {
    if($_SERVER['REQUEST_METHOD'] == 'POST') {
        # forms
    } else {
        if(strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
            # datatable
            header('Content-type: application/json');
            echo json_encode(null);
        } else {
            # get
            header('Location: '.URL_CMS.'logout.php?expired=true');
        }
    }
    die();
} else {
    # update expiration time
    $_SESSION['login_expire'] = time();
}

最后一位控制空闲时间。它还应该考虑ajax调用,在这种情况下它应该返回一个json_encode(null)字符串,而不是通过php重定向:

if(strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')

1 个答案:

答案 0 :(得分:0)

你想要的是你的PHP返回一些包含响应状态的JSON,然后使用该响应将它们发送到错误页面,如果状态不好的话。例如,让PHP返回{"status":"failed", "message":"Expired"}而不是像当前那样设置Location标头。

然后在你的Javascript中:

if(json.status != "failed") {
    fnCallback(json);
} else {
    window.location.href = "logout.php";
}