Не обновляется страница при возврате Ajax

Есть небольшой проект по регистрации и авторизации на PHP.
upload_2022-9-23_12-49-26.png

upload_2022-9-23_12-50-13.png

Пытаюсь реализовать отправку формы с Ajax.
Пример входа в кабинет.
Запросы обрабатываются роутером (Router.php)
Он перенаправляет на нужный контроллер (например UserController.php).
Тот в свою очередь обрабатывает запрос, передает данные в model (user.php) и в случае успеха перенаправляет в cabinet (index.php).

user/login.php

PHP:
  1. <?php include ROOT . ‘/views/layouts/header.php’; ?>
  2.  
  3. <section>
  4.         <div class=»container»>
  5.             <div class=»row»>
  6.                 <div>
  7.                     <p align=»center»><?php echo $userError; ?></p>
  8.                     <div align=»center» class=»signup-form»>
  9.                         <h3>Вход на сайт</h3>
  10.                         <form id=»form-signin» method=»post»>
  11.                             <a><?php echo $log6; ?></a>
  12.                             <p><input id=»login» type=»text» name=»login» placeholder=»Login» value=»<?php echo $login; ?>«/><p>
  13.                             <p><input id=»password» type=»password» name=»password» placeholder=»Пароль» value=»<?php echo $password; ?>«/></p>
  14.                             <!— <input id=»submit» type=»submit» name=»submit» class=»btn1″> —>
  15.                             <button class=»btn btn-primary» type=»button» id=»submit» name=»submit»>Вход</button>
  16.                         </form>
  17.                         <p id=»hello»>.</p>
  18.                     </div>
  19.                 </div>
  20.             </div>
  21.         </div>
  22.     </section>
  23.  
  24.     <script src=»https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js»></script>
  25.     <script src=»/template/js/main.js»></script>
  26. </body>
  27. </html>

template/js/main.js

Код (Javascript):
  1. $(document).ready(function()
  2. {
  3.   $(«#submit»).click(function()
  4.   {
  5.     var params = {
  6.       login: $.trim($(«#login»).val()),
  7.       password: $.trim($(«#password»).val()),
  8.     }
  9.     $.ajax({
  10.             type: ‘POST’,
  11.             url: «»,
  12.             // contentType: ‘application/json;charset=UTF-8’,
  13.             data: params,
  14.            
  15.             success: function()
  16.             {
  17.             console.log(«OK»);
  18.             },
  19.             // dataType: «json»
  20.     });
  21.    
  22.   });
  23.  
  24. });

После отправки формы c валидными данными (нажав на кнопку «Вход»)
upload_2022-9-23_13-3-3.png

В системе вход в кабинет происходит, а на странице не происходит ничего.

Если обновить страницу вручную, то heder обновляется (видно имя пользователя), а страница так и остается «страница входа» (login.php)? а не «страница кабинета» (cabinet/index.php).
upload_2022-9-23_13-8-53.png

должно быть
upload_2022-9-23_13-10-23.png

Подскажите пожалуйста что я делаю не так.
Спасибо.

 

Ну аджаск сам на другую страничку переходить не будет. Дождаться успешного выполнения и перейти через location.href.

 

Спасибо.

Добавил в success «window.location.href = ‘/cabinet’;
теперь при валидных данных переходит в кабинет и отображает его.
Но:
1. В devtools -> network Fetch/XHR запрос на третьсекунды появляется и сразу исчезает. (Не могу проверить какие данные переданы и получены.
2. При не валидных данных не появляются ошибки. Просто ничего не происходит.

С чем это может быть связано? Может быть мне в $.ajax({ …. нужно url: ‘какой-то указать?’

 

Ну так откуда браузер знает, что должно происходить? Это тоже запрограммировать надо

Ну ты же на другую страничку переходишь, всё-таки. Можно не переходить, но не уверен, что ты сам потянешь такое запрограммировать. Вот все современные фронт-технологии аля Ангуляр, Вью, Реакт и прочие посвящены как раз тому, чтоб не переходить
— Добавлено —
На ваниле или jquery тоже можно запрограммировать, в принципе. Но тут надо подзамарочиться. Или поискать либу, был такой проект pjax, например

 

У меня проверка ошибок запрограммирована в контроллере и модельке

PHP:
  1. <?php
  2.  
  3. /**
  4. * Контроллер UserController
  5. */
  6. class UserController
  7. {
  8.    
  9.     /**
  10.      * Action для страницы «Регистрация»
  11.      */
  12.     public function actionRegister()
  13.     {
  14.         //Переменные для ошибок в форму
  15.         $log6 = «»;
  16.         $logUse = «»;
  17.         $pass6 = «»;
  18.         $passData = «»;
  19.         $passConflict = «»;
  20.         $emailIncorrect = «»;
  21.         $emailUse = «»;
  22.         $nameLength = «»;
  23.         $reg = «»;
  24.         $logSpace = «»;
  25.         $nameSpace = «»;
  26.         $passChar = «»;
  27.         $nameLengthMax =«»;
  28.  
  29.         // Переменные для формы
  30.         $login = false;
  31.         $password = false;
  32.         $confirmPassword = false;
  33.         $email = false;
  34.         $name = false;
  35.        
  36.         $result = false;
  37.  
  38. // Обработка формы
  39.         if (@$_SERVER[‘HTTP_X_REQUESTED_WITH’] == ‘XMLHttpRequest’) {
  40.            
  41.         if (isset($_POST[‘submit’])) {
  42.             // Если форма отправлена
  43.             // Получаем данные из формы
  44.             $login = $_POST[‘login’];
  45.             $password = $_POST[‘password’];
  46.             $confirmPassword = $_POST[‘confirmPassword’];
  47.             $email = $_POST[’email’];
  48.             $name = $_POST[‘name’];
  49.            
  50.             // Флаг ошибок
  51.             $errors = false;
  52.          
  53.             // Валидация полей
  54.             if (!User::checkLogin($login)) {
  55.                 $errors[] = ‘Login не должен быть короче 6-ти символов’;
  56.                 $log6 = ‘Login не должен быть короче 6-ти символов’;
  57.             }
  58.             if (!User::checkSpaceLogin($login)) {
  59.                 $errors[] = ‘Login не должен содержать пробелы’;
  60.                 $logSpace = ‘Login не должен содержать пробелы’;
  61.             }
  62.             if (!User::checkUserLogin($login)) {
  63.                 $errors[] = ‘Такой Login уже используется’;
  64.                 $logUse = ‘Такой Login уже используется’;
  65.             }
  66.             if (!User::checkPassword($password)) {
  67.                 $errors[] = ‘Пароль не должен быть короче 6-ти символов’;
  68.                 $pass6 = ‘Пароль не должен быть короче 6-ти символов’;
  69.             }
  70.             if (!User::checkDataPassword($password)) {
  71.                 $errors[] = ‘Пароль должен содержать буквы и цифры’;
  72.                 $passData = ‘Пароль должен содержать буквы и цифры’;
  73.             }
  74.             if (User::checkCharsPassword($password)) {
  75.                 $errors[] = ‘Пароль не должен содержать спец символы’;
  76.                 $passChar = ‘Пароль не должен содержать спец символы’;
  77.             }
  78.             if (!User::checkConfirmPassword($password, $confirmPassword)) {
  79.                 $errors[] = ‘Пароли не совпадают’;
  80.                 $passConflict = ‘Пароли не совпадают’;
  81.             }
  82.             if (!User::checkEmail($email)) {
  83.                 $errors[] = ‘Неправильный email’;
  84.                 $emailIncorrect = ‘Неправильный email’;
  85.             }
  86.             if (!User::checkEmail2($email)) {
  87.                 $errors[] = ‘Неправильный email’;
  88.                 $emailIncorrect = ‘Неправильный email’;
  89.             }
  90.             if (!User::checkUserEmail($email)) {
  91.                 $errors[] = ‘Такой Email уже используется’;
  92.                 $emailUse = ‘Такой Email уже используется’;
  93.             }
  94.             if (!User::checkSpaceName($name)) {
  95.                 $errors[] = ‘Login не должен содержать пробелы’;
  96.                 $nameSpace = ‘Login не должен содержать пробелы’;
  97.             }
  98.             if (!User::checkName($name)) {
  99.                 $errors[] = ‘Имя не должно быть короче 2-х символов’;
  100.                 $nameLength = ‘Имя не должно быть короче 2-х символов’;
  101.             }
  102.             if (!User::checkNameMax($name)) {
  103.                 $errors[] = ‘Имя не должно быть длинее 25-х символов’;
  104.                 $nameLengthMax = ‘Имя не должно быть длинее 25-х символов’;
  105.             }
  106.            
  107.            
  108.             if ($errors == false) {
  109.                 // Если ошибок нет
  110.                 // Регистрируем пользователя
  111.                 $result = User::register($login, $password, $confirmPassword,$email, $name);
  112.                 $reg = «Вы зарегистированы!»;
  113.             }
  114.         }
  115.         }
  116.  
  117.         // Подключаем вид
  118.         require_once(ROOT . ‘/views/user/register.php’);
  119.         return true;
  120.     }
  121.    
  122.     /**
  123.      * Action для страницы «Вход на сайт»
  124.      */
  125.     public function actionLogin()
  126.     {
  127.        
  128.         //Переменные для ошибок в форму
  129.         $userError = «»;
  130.         $log6 = «»;
  131.         $pass6 = «»;
  132.         $success = «»;
  133.         $user = «»;
  134.  
  135.         // Переменные для формы
  136.         $login = false;
  137.         $password = false;
  138.  
  139.         if (@$_SERVER[‘HTTP_X_REQUESTED_WITH’] == ‘XMLHttpRequest’) {    
  140.         // Обработка формы
  141.         if (isset($_POST[‘login’])) {
  142.            
  143.             // Если форма отправлена
  144.             // Получаем данные из формы
  145.             $login = $_POST[‘login’];
  146.             $password = $_POST[‘password’];
  147.  
  148.             // Флаг ошибок
  149.             $errors = false;
  150.  
  151.             // Валидация полей
  152.             if (!User::checkLogin($login)) {
  153.                 $errors[] = ‘Login не должен быть короче 6-ти символов’;
  154.                 $log6 = ‘Login не должен быть короче 6-ти символов’;
  155.             }
  156.        
  157.             // Проверяем зарегистрирован ли пользователь
  158.             $userId = User::checkUserData($login, $password);
  159.  
  160.             if ($userId == false) {
  161.                 // Если данные неправильные — показываем ошибку
  162.                 $errors[] = ‘Неправильные данные для входа на сайт’;
  163.                 $userError = ‘Неправильные данные для входа на сайт’;
  164.             } else {
  165.                 $_SESSION[‘user’] = $login;
  166.                 $success = «Hello «;
  167.                 // // Перенаправляем пользователя в закрытую часть — кабинет
  168.                 header(«Location: /cabinet»);
  169.            
  170.  
  171.             }
  172.            
  173.         }
  174.         } else {
  175.  
  176.         // Подключаем вид
  177.         require_once(ROOT . ‘/views/user/login.php’);
  178.         return true;
  179.         }
  180.     }
  181.  
  182.     /**
  183.      * Удаляем данные о пользователе из сессии
  184.      */
  185.     public function actionLogout()
  186.     {      
  187.         // Удаляем информацию о пользователе из сессии
  188.         unset($_SESSION[«user»]);
  189.        
  190.         // Перенаправляем пользователя на главную страницу
  191.         header(«Location: /»);
  192.     }
  193.  
  194. }
  195. тут и переход есть в кабинет.

Model/User.php получает данные и обрабатывает.

Извини, что столько кода сюда засунул.

У меня без ajax все работало. А теперь что-то не клеится.

Задача такая:
— Проверить отправку формы с использованием AJAX [при отправке формы страница не должна перезагружаться, в devtools во вкладке network можно увидеть фоновый запрос и его ответ]
— Проверить соответствие ответа формату JSON [code + devtools]

 

Браузеру по барабану. Тут два варианта — либо ты не отправляешь ажаксом, а просто сабмитишь в браузере с перезагрузкой страницы, и тогда то, что ты там нагенерил на пыхе, выводится само, либо с ажаксом выводишь то, что надо, средствами js. Другого не дано

 

Понял, спасибо.

Только уточни еще, мне в js перенести только обработку ошибок и перенаправление или все, что есть в файлах UserController.php и User.php?

 

Странный вопрос. Ты понимаешь, что выполняется в браузере, а что на сервере?

 

Видимо не совсем. Подскажи.
Как мне выводить то, что нужно средствами Js?

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *