我从外部呼叫接收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')
答案 0 :(得分:0)
你想要的是你的PHP返回一些包含响应状态的JSON,然后使用该响应将它们发送到错误页面,如果状态不好的话。例如,让PHP返回{"status":"failed", "message":"Expired"}
而不是像当前那样设置Location标头。
然后在你的Javascript中:
if(json.status != "failed") {
fnCallback(json);
} else {
window.location.href = "logout.php";
}