2014-02-05 4 views
-1

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')

+0

Я не получаю эту фразу: «Тем не менее, все данные logout.php время приема в качестве ответа JSon» – Ron

+0

@Ron данные logout.php принимаются как ответ json на вкладке Developers Tools> Network – andufo

+0

, вы уверены, что ваш sSource не является «logout.php»? вы можете console.log его – Ron

ответ

0

Что вы хотите, чтобы ваш PHP, чтобы вернуть некоторые JSON, который включает в себя статус ответа а затем использовать этот ответ, чтобы отправить их на страницу с ошибкой, если это плохой статус. Например, верните свой PHP-код {"status":"failed", "message":"Expired"} вместо того, чтобы устанавливать заголовок Location, как сейчас.

Затем в Javascript:

if(json.status != "failed") { 
    fnCallback(json); 
} else { 
    window.location.href = "logout.php"; 
} 
Смежные вопросы