Задать вопрос
Muranx
@Muranx
кто понял this тот в цирке не смеётся

Как правильно отправлять асинхронные запросы из формы?

Здравствуйте!

Начинаю пробовать делать форму авторизации пользователя, встал насущный вопрос, как мне асинхронно сделать запрос на сервер (кстати я использую локальный openServer).. Пока что я застрял на ответе со стороны сервера, не понимаю как получить данные на сервере, которые я отправил методом POST, возможно касяк в самой форме, т.к. синхронный вариант я могу принимать на серваке спокойно, т.к. поля name="user_name" спокойно отлавливаются в массиве $_POST["user_name"] на сервере...

<div class="login_form_wrp">
	<div class="greetings">Введите ваши данные в форму :</div>
	<form action="" class="login_form" >
		<input class="login_input" type="text" name="user_name">
		<input autocomplete class="password_input" type="password" name="user_password">
		<div class="submit_login_btn" onclick="sendRequest();">Войти</div>
	</form>
</div>

сама функция , которая отправляет аякс запрос sendRequest()

function sendRequest(){

	let xhr = new XMLHttpRequest();
		login = document.querySelector('.login_input').value,
		pass = document.querySelector('.password_input').value;

	xhr.open('POST', 'php/login.php');
	xhr.send(JSON.stringify({log : login, pass: password});
	xhr.onload = function(){
		console.log(xhr.response);
	};
};

ну и собстно php...
echo json_encode($_POST);
результатом в консоль выводится []
1. если я меняю
<div class="submit_login_btn" onclick="sendRequest();">Войти</div>
на
<button class="submit_login_btn" onclick="sendRequest();">Войти</button>
происходит перезагрузка страницы (выяснено экспериментальным путём), это так и должно быть?
2. я предполагаю что при ajax запросах мне вообще ненужна как таковая конструкция формы? Т.е. я всё равно не использую атрибут action="", получается можно просто делать два инпута, и свой кастомный сабмит баттн?
3. почему массив $_POST на стороне сервера пуст, как мне отловить тот json который я пытаюсь асинхронно отправить, ведь он не именнованный в отличии от синхронных запросов и отправок типо $_POST["user_name"]?
  • Вопрос задан
  • 243 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
При таком способе отправки данные в PHP надо получать не из $_POST а из php://input

<?php
$json = file_get_contents('php://input');
$data = json_decode($json, true);

//ваши данные в $data['log'], $data['pass']
print_r($data);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Revencu
@Revencu
button изолированный в form работает по разному если у него атрибут type="submit" (по умолчанию) или type="button"
форма перегрузится в первом случае даже если не указан action
Используя второй метод используется только функция при клике
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы