2016-07-12 1 views
0

Я знаю, что есть много ответов о моей проблеме, но я новичок в ajax и javascript. Я хотел бы, чтобы кто-то указал мне на проблему, вызвав ошибку моего сценария.
Я сделал регистрацию с помощью ajax на основе этого ответа Check if user logged in on ajax page change. Когда нажата кнопка отправки, функция проверяет, вошел ли пользователь в систему или нет. Я хочу показать предупреждение, если его нет, и перейти на следующую страницу, если это так.
Моя JavaScript:Ajax для проверки входа в систему не работает и отправляет форму

$('#bookForm').submit(function(){ 
    $.ajax({ 
      url : '<?=BASE_URL?>user/logged.php', 
      success : function(response){ 
       if (response.logged == true) { 
        return true; 
       }else{ 
        alert('you need to log in'); 
        //e.preventDefault(); 
        return false; 
       } 
      } 
    }); 
}); 

Мой PHP скрипт, который проверяет, если пользователь вошел в систему:

$response = array(); 

if(!isset($_SESSION['userId'])) { 

    $response['logged'] = false; 

}else{ 

    $response['logged'] = true; 

} 

$response = json_encode($response); 

echo($response); 

Я новичок в JavaScript/AJAX, и я не знаю, где проблема. Функция возвращает предупреждение для не зарегистрированного пользователя, несмотря на то, что пользователь вошел в систему.

+0

Удалите 'обратный json_encode ($ ответа); ' – RiggsFolly

+0

И echo не нуждается в скобках, поэтому' echo $ response; ' – RiggsFolly

+1

Вы смотрели запрос/ответ AJAX в инструментах разработчика браузера? Включили ли вы библиотеку jQuery в проект? Есть ли сообщения об ошибках? Вы используете это на веб-сервере? Как вы устанавливаете 'BASE_URL'? –

ответ

0

Вы должны добавить эту опцию: dataType:'json' в свой вызов ajax.

И echo json_encode ($ response); без какого-либо возврата.

+0

Я добавил dataType и удалил return, но тот же результат - всегда false –

+0

Вы изменили отображаемое значение в php на кодированную версию json? –

0

Внесите следующие изменения в код JQuery.

$('#bookForm').submit(function(event){ 

event.preventdefault(); 

    $.ajax({ 

     url : '<?= BASE_URL ?>user/logged.php', 
     dataType:'json' 
     success : function(response){ 

      if (response.logged == true) { 
       return true; 
      } 
      else{ 
       alert('you need to log in'); 
       //e.preventDefault(); 
       return false; 
      } 
     } 
    }); 
}); 

Удалите return json_encode($response); из PHP сценария

+1

Это хорошая идея добавить это, но он не отвечает на этот вопрос. – RiggsFolly

+0

Зачем нужно это делать? *** Хороший ответ *** всегда будет объяснять, что было сделано и почему это было сделано таким образом, не только для OP, но и для будущих посетителей SO. –

+0

форма не отправляется, но оператор if всегда неверен независимо от входа пользователя в систему –