Отправка формы с jQuery AJAX на требуемый PHP обработчик POST-запроса не работает - PullRequest
0 голосов
/ 22 января 2020

Всякий раз, когда я отправляю с помощью jquery ajax в PHP api, форма не отправляется необходимому обработчику почтового запроса . Но когда я в основном отправляю форму, я имею в виду, что без использования javascript или jquery форма отправляется и перенаправляется на страницу php с ответом json.

Примечание Никаких проблем с CORS здесь нет, с CORS все в порядке, поскольку я разрешил межсайтовые запросы в API.

Ниже мой логин. html файл.

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="./assets/css/style.css">
    <script src="./assets/js/jquery-3.4.1.min.js"></script>
    <title>User Login Page</title>
</head>

<body>
    <div class="header">
        <h2>Login</h2>
    </div>

    <form action="http://localhost/auth-app/server.php" method="post">
        <div class="input-group">
            <label for="">Email</label>
            <input type="email" name="email" id="email" required>
        </div>
        <div class="input-group">
            <label for="">Password</label>
            <input type="password" name="password" id="password" required>
        </div>
        <div class="input-group">
            <input type="submit" value="Login" name="login" class="submit-btn">
        </div>
        <p>
            Not yet a member? <a href="register.html">Register</a>
        </p>
    </form>

    <script>
        $(document).ready(function () {
            // submit login form with ajax
            $('form').submit(function (event) {
                /* stop form from submitting normally */
                event.preventDefault();
                $(".submit-btn").click(function () {
                    $.post("http://localhost/auth-app/server.php", {
                        email: $('#email').val(),
                        password: $('#password').val()
                    },
                        function (data, status) {
                            const json = $.parseJSON(data);
                            console.log("Data: " + typeof(json) + "\nStatus: " + status);
                        });
                });
            });
        });


    </script>
</body>

</html>

Примечание Я хочу, чтобы можно было отправить форму в необходимую PHP функцию обработчика после запроса с использованием jquery ajax.

Ниже мой сервер. php файл API.


$errors = array();

// login
if (isset($_POST['login'])) {
    $email = $db->real_escape_string($_POST['email']);
    $password = $db->real_escape_string($_POST['password']);

    if (empty($email)) {
        array_push($errors, 'Email is required');
    }
    if (empty($password)) {
        array_push($errors, 'Password is required');
    }

    if (count($errors) == 0) {

                // log user in
                $data = ['success_login' => 'true'];
                header('Content-type: application/json');
                echo json_encode(null);
        } else {
            array_push($errors, 'The email or password is incorrect');
            // after entering wrong credentials
            $data = ['success_login' => 'false'];
            header('Content-type: application/json');
            echo json_encode($data);
        }
}

В отладочная консоль Я получаю сообщение об ошибке ниже. Примечание это просто доказательство того, что почтовый запрос не достигает обработчика php почтового запроса в файле api.

SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 of the JSON data

Что я ожидаю получить в данные консоли json, как показано ниже:

success_login   "true"

! ВАЖНАЯ ИНФОРМАЦИЯ: Я не очень разбираюсь в php, но я заметил, что при отправке формы без использования javascript например jquery или ajax форма успешно отправлена, поскольку имя кнопки отправки, например <input type="submit" value="Login" name="login">, совпадает с именем внутри $_POST['login']. Но при отправке формы с использованием ajax технически вы не используете эту кнопку для отправки.

Итак, как мне решить эту проблему? Спасибо, опубликовано с любовью.

Ответы [ 2 ]

0 голосов
/ 22 января 2020

Вам не нужно объявлять событие нажатия кнопки, поскольку вы уже используете событие кнопки отправки формы. Кроме того, добавьте ключ login в качестве значения параметра в $. Post , так как вы проверяете его значение isset в login. php файле.

Также обратите внимание, что в вашем логине есть дополнительные закрывающие скобки "}" . php file

0 голосов
/ 22 января 2020

Попробуйте что-то вроде кода ниже

      $(document).ready(function () {
        $('form').submit(function (event) {
        event.preventDefault();
        $(".submit-btn").click(function () {

         name: $('#email').val(),
         password: $('#password').val()

        $.ajax({
            type: 'post',
            url: 'http://localhost/auth-app/server.php',
            data: {
                name: name,
                password : password,
                action: 'login'
            },
            success: function(response) {

            }
        })
    });
    });
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...