Всякий раз, когда я отправляю с помощью 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 технически вы не используете эту кнопку для отправки.
Итак, как мне решить эту проблему? Спасибо, опубликовано с любовью.