2015-08-28 2 views
3

У меня есть класс AJAX, который асинхронно проверяет токен на форме.AJAX прекращает выполнение до конца скрипта

Фактическая функциональность, что после проверки, чтобы увидеть его Токен существует, он должен удалить существующий маркер и создать еще один

Вот это PHP скрипт:

if (Session::exists($tokenName) && $token === Session::get($tokenName)) { 
     Session::delete($tokenName); 
     return true; 
    } 

Он будет проходить через в первой строке, когда она попадает во вторую строку, она удаляет токен, но не возвращает true. Если я прокомментирую строку Session::delete($tokenName);, она вернет true.

Если я инвертирую код i.e return true; до Session::delete($tokenName);, он вернет true, но не удалит сеанс.

Может кто-нибудь помочь мне в решении проблемы. Благодарю.


Отредактировано: Ниже приведен метод в классе Session

public static function delete($name) 
    { 
     if (self::exists($name)) { 
      unset($_SESSION[$name]); 
     } 
    } 

Целая функция:

public static function check($token) 
    { 
     $tokenName = Config::get('session/token_name'); 

     if (Session::exists($tokenName) && $token === Session::get($tokenName)) { 
     Session::delete($tokenName); 
     return true; 
     } 

     return false; 
    } 

Мой AJAX Snippit:

var ajax = new AjaxRequest("POST", "php-script", params, function (responseText, responseStatus) { 
    var response = JSON.parse(responseText); 

}); 

Это PHP скрипт, который получает пост AJAX:

if (Token::check('token')) { 
    //The first snippet should run, delete the token and return true (That's where my problem comes from) 
    //If it returns true after deleting the token, this script should continue but since it is not *i'm stuck* 
} 
+0

Вы используете топливную смесь? – Maverick

+0

Нет! я вообще не использую никаких фреймворков. Вот если я знаю, что означает топливная нагрузка на самом деле – Prodigy

+0

Когда вы «возвращаете» любой код после того, как это не выполняется, это причина, почему, если вы ставите код перед возвратом, он не обрабатывается. Я думаю, что «Session :: delete()» возвращает что-то (это не «правда»), поэтому «return true»; не обрабатывается. – Maverick

ответ

2

Никаких проблем не существует с кодом PHP. Но если вы хотите передать возвращаемое значение/сообщение в ajax, тогда вы должны повторить результат в конце php-файла. Поскольку вы используете возвращаемое значение ajax echo в формате json как: echo "{'status': 1}"; Затем используйте переменную ответа в ajax как: response.status

+0

Он работал отлично, но благодаря имеющему что-то вроде этой 'общественной проверки статической функции ($ лексемы) \t { \t \t $ tokenName = Config :: получить ('маркера/TOKEN_NAME'); \t \t если (Session :: существует ($ tokenName) && $ лексема === Session :: получить ($ tokenName)) { \t \t \t Session :: удалить ($ tokenName); \t \t \t return true; \t \t \t exit(); \t \t} \t \t return false; \t \t exit(); \t} ' Правильно ли это так:' exit() 'дважды, или я должен просто поместить его в конец функции. – Prodigy

Смежные вопросы