im получает json-файл из внешнего вызова. Если json имеет нулевое значение (возможно, если пользовательский сеанс истек), пользователь должен быть перенаправлен на страницу logout.php. В моем текущем вызове вместо перенаправления данные logout.php принимаются как ответ json.Как перенаправить пользователя из вызова getJSON?
Итак, как мне перенаправить пользователя, когда данные json равны нулю?
$.getJSON(sSource, aoData, function (json) {
if(json !== null) {
fnCallback(json);
} else {
window.location.href = "logout.php";
}
});
Благодаря @ наблюдение я Рон заметил, что, хотя 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')
Я не получаю эту фразу: «Тем не менее, все данные logout.php время приема в качестве ответа JSon» – Ron
@Ron данные logout.php принимаются как ответ json на вкладке Developers Tools> Network – andufo
, вы уверены, что ваш sSource не является «logout.php»? вы можете console.log его – Ron