POST-запросы. Метод post

Последнее обновление: 1.11.2015

В отличие от GET-запросов данные POST-запросов передаются не в строке запроса, а в его теле. Распространенным примеров подобных запросов является отправка данных формы на сервер.

Для отправки POST-запросов предназначен метод post. Его объявление и использование в целом аналогично методу get. Он принимает следующие параметры:

  • url: обязательный параметр, содержащий адрес ресурса, к которому будет обращаться запрос

  • data: необязательный параметр, содержащий простой объект javascript или строку, которые будут отправлены на сервер вместе с запросом

  • success(data, textStatus, jqXHR): необязательный параметр - функция обратного вызова, которая будет выполняться при успешном выполнении запроса. Она может принимать три параметра: data - данные, полученные с сервера, textStatus - - статус запроса и jqXHR - специальный объект jQuery, который представляет расширенный вариант объекта XMLHttpRequest.

  • dataType: необязательный параметр, содержащий тип данных в виде строки, например, "xml" или "json"

На выходе метод post возвращает объект jqXHR.

Пример использования:

$.post('ajax.php', {'login':'1111', 'password' : '2222'},
		function(data) {
		$('#news').html(data);
		});

В данном случае мы передаем в качестве данных пароль и логин. На сервере мы можем получить данные и отправить ответ пользователю:

<?php
	$login=$_POST['login'];
	$pass=$_POST['password'];
	if($login=="1111" && $pass=="2222"){
		echo "Авторизация прошла успешно";
	}
	else{
		echo "Неверно введен логин или пароль";
	}
?>

Поскольку наиболее часто запрос post используется при отправке данных формы, используем на стороне клиента форму:

<html>
	<head>
		<meta charset='utf-8'>
		<script src="jquery-1.10.1.min.js"></script>
	</head>
	<body>
		 <form action="ajax.php" id="loginForm">
			<input type="text" id="login" placeholder="Логин" /><br><br>
			<input type="text" id="password" placeholder="Пароль" /><br><br>
			<input type="submit" value="Войти" />
		</form>
		<div id="result"></div>
		<script type="text/javascript">
		$("#loginForm").submit(function(event) {
			// Предотвращаем обычную отправку формы
			event.preventDefault();
			$.post('ajax.php', {'login':$('#login').val(), 'password' : $('#password').val()},
					function(data) {
							$('#result').html(data);
					});
			});
		</script>
	</body>
</html>

Итак, серверная часть, к которой будет обращаться форма - файл ajax.php - у нас остается той же. Только в данном случае теперь для параметра data в методе post мы данные берем из полей на этой форме.

Обратите внимание, что мы блокируем обычную отправку формы (event.preventDefault();), иначе у нас бы шла переадресация.

Сериализация формы

Посколкьу нередко формы не ограничиваются двумя полями, то проще применять сериализацию формы. Сериализация производится посредством метода serialize и в качестве результата создает объект javascript, где свойствам соответствуют поля формы. И значения хранят эти свойства те же, что имеют соответственные поля формы.

Итак, применим сеиализацию формы:

		 <form action="ajax.php" id="loginForm">
			<input type="text" name="login" placeholder="Логин" /><br><br>
			<input type="text" name="password" placeholder="Пароль" /><br><br>
			<input type="submit" value="Войти" />
		</form>
		<div id="result"></div>
		<script type="text/javascript">
		$("#loginForm").submit(function(event) {
			// Предотвращаем обычную отправку формы
			event.preventDefault();
			$.post('ajax.php', $("#loginForm").serialize(),
					function(data) {
							$('#result').html(data);
					});
			});
		</script>

В отличие от предыдущего примера у нас здесь два отличия. Во-первых, обратите внимание, что поля для ввода имеют атрибут name. При указании параметра data мы производим сериализацию данных формы через метод serialize: $("#loginForm").serialize(). В данном методе в тело запроса передаются параметры. Причем имена параметров - это значения атрибутов name полей ввода. А значения параметров - соответственно введенные значения в текстовые поля.

И поэтому с помощью php мы можем извлечь эти значения: $login=$_POST['login'].

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850