jQuery - отправка данных AJAX. Примеры.


  1. GET запрос через AJAX
  2. POST запрос через AJAX
  3. Отправка формы через AJAX
  4. Работа с JSON
  5. Выполнение JS загруженного через AJAX
  6. Дождаться выполнения AJAX запроса
  7. Отправка HTTP заголовков
  8. Ajax - Обработка ошибок

Сегодня технология AJAX используется практически на всех ресурсах интернета. Спектр её применения необычайно широк и технологичен. Основная задача AJAX это обмен данными между сайтом и сервером без традиционной перезагрузки страницы.

GET запрос через AJAX

Например, нам нужно обратиться к файлу test.php с парамертром "testdata" и значением "test" и получить ответ сервера, что данные приняты, но без перезагрузки страницы в от личии от традиционного GET запроса как а браузерной строке "https://site.ru?testdata=test" с перезагрузкой. При удачном запросе в ответе получаем сообщение: "Успешное получение данных".

JS
$.ajax({
	url: '/test.php',         /* Куда пойдет запрос */
	method: 'get',             /* Метод передачи (post или get) */
	dataType: 'html',          /* Тип данных в ответе (xml, json, script, html). */
	data: {testdata: 'test'},     /* Параметры передаваемые в запросе. */
	success: function(data){   /* функция которая будет выполнена после успешного запроса.  */
		alert(data);            /* В переменной data содержится ответ от test.php. */
	}
});

Или использовать сокращённую функцию $.get

JS
$.get('/test.php', {testdata: 'Test'}, function(data){
	alert(data);
});

Код файла приёма данных:

PHP
if($_GET['testdata'] == 'test'){
  echo 'Успешное получение данных - ' . $_GET['test'];
}

GET запросы могут кэшироваться браузером или сервером, чтобы этого избежать нужно добавить в функцию параметр – cache: false.

 

JS
$.ajax({
	url: '/test.php',
	method: 'get',
	cache: false
});

POST запрос через AJAX

JS
$.ajax({
	url: '/test.php',
	method: 'post',
	dataType: 'html',
	testdata: {text: 'Test'},
	success: function(data){
		alert(data);
	}
});

//Или сокращенный вариант – функция $.post

$.post('/test.php', {testdata: 'Test'}, function(data){
	alert(data);
});

POST запросы ни когда не кэшируются.

Отправка формы через AJAX

При отправке формы применяется функция serialize().

Она обходит форму и собирает названия и заполненные пользователем значения полей и возвращает в виде массива: 

{login: 'ЗНАЧЕНИЯ_ПОЛЯ', password: 'ЗНАЧЕНИЯ_ПОЛЯ'}.

Особенности serialize():

Кнопки формы по которым был клик игнорируются, в результате функции их не будет.

serialize можно применить только к тегу form и полям формы, т.е. $('div.form_container').serialize(); – вернет пустой результат.

Пример отправки и обработки формы:

HTML
<div class="form_container">
	<div id="message"></div>
	<form id="form">
		<input type="text" name="login">
		<input type="text" name="password">
		<input type="submit" name="send" value="Отправить">
	</form>
</div>

JS
<script>
$("#form").on("submit", function(){
	$.ajax({
		url: '/handler.php',
		method: 'post',
		dataType: 'html',
		data: $(this).serialize(),
		success: function(data){
			$('#message').html(data);
		}
	});
});
</script>

PHP
if (empty($_POST['login'])) {
	echo 'Укажите логин';
} elseif (empty($_POST['password'])) {
	echo 'Укажите пароль';
} else {
	echo 'Авторизация...';
}

Работа с JSON

Приориететное применение в случае когда в ответе нужно передать массив данных.

JS
$.ajax({
	url: '/json.php',
	method: 'get',
	dataType: 'json',
	success: function(data){
		alert(data.text);    /* выведет "Текст" */
		alert(data.error);   /* выведет "Ошибка" */
	}
});

//Сокращённый синтаксис

$.getJSON('/json.php', function(data) {
	alert(data.text);
	alert(data.error);
});

$.getJSON передает запрос только через GET.

Код файла json.php:

JS
header('Content-Type: application/json');
 
$result = array(
	'text'  => 'Текст',
	'error' => 'Ошибка'
);
 
echo json_encode($result);

Возможные проблемы

При работе с JSON может всплыть одна ошибка – после запроса сервер отдал результат, все хорошо, но метод success не срабатывает. Причина кроется в серверной части (PHP) т.к. перед данными могут появится управляющие символы, например:

Управляющие символы в ответе JSON

Из-за них ответ считается не валидным и считается как ошибочный запрос.

В таких случаях помогает очистка буфера вывода ob_end_clean (если он используется на сайте).

Из-за них ответ считается не валидным и считается как ошибочный запрос.

В таких случаях помогает очистка буфера вывода ob_end_clean (если он используется на сайте).

PHP
...
 
// Очистка буфера
ob_end_clean(); 
		
header('Content-Type: application/json');
echo json_encode($result, JSON_UNESCAPED_UNICODE);
exit();

Выполнение JS загруженного через AJAX

В JQuery реализована функция подгруздки javascript кода через AJAX, после успешного получения ответа на запрос он будет сразу выполнен.

JS
$.ajax({
	method: 'get',
	url: '/script.js',
	dataType: "script"
});

//Или короткий вариант

$.getScript('/script.js');

Дождаться выполнения AJAX запроса

По умолчанию в JQuery AJAX запросы выполняются асинхронно. Т.е. запрос не задерживает выполнение программы пока ждет результатов, а работает параллельно.

Пример:

JS
var text = '';
 
$.ajax({
	url: '/index.php',
	method: 'get',
	dataType: 'html',
	success: function(data){
		text = data;
	}
});
 
alert(text);  /* Переменная будет пустая. */

Переменная text будет пустая, а не как ожидается текст который вернул index.php

Чтобы включить синхронный режим нужно добавить параметр async: false.
Соответственно синхронный запрос будет вешать прогрузку страницы если код выполняется в 

 страницы.

JS
var text = '';
 
$.ajax({
	url: '/index.php',
	method: 'get',
	dataType: 'html',
	async: false,
	success: function(data){
		text = data;
	}
});
 
alert(text); /* В переменной будет результат из index.php. */

Отправка HTTP заголовков

Через AJAX можно отправить заголовки HEAD, они указываются в параметре headers.

JS
$.ajax({
	url: '/index.php',
	method: 'get',
	dataType: 'html',
	headers: {'Token_value': 123},
	success: function(data){
		console.dir(data);
	}
});

В PHP они будут доступны в массиве $_SERVER, ключ массива переводится в верхний регистр с приставкой HTTP_, например:

PHP
<?php
echo $_SERVER['HTTP_TOKEN_VALUE']; // 123

Ajax - Обработка ошибок.

Через параметр error задается callback-функция, которая будет вызвана в случаи если запрашиваемый ресурс отдал 404, 500 или другой код.

JS
$.ajax({
	url: '/index.php',
	method: 'get',
	dataType: 'json',
	success: function(data){
		console.dir(data);
	},
	error: function (jqXHR, exception) {
		if (jqXHR.status === 0) {
			alert('Not connect. Verify Network.');
		} else if (jqXHR.status == 404) {
			alert('Requested page not found (404).');
		} else if (jqXHR.status == 500) {
			alert('Internal Server Error (500).');
		} else if (exception === 'parsererror') {
			alert('Requested JSON parse failed.');
		} else if (exception === 'timeout') {
			alert('Time out error.');
		} else if (exception === 'abort') {
			alert('Ajax request aborted.');
		} else {
			alert('Uncaught Error. ' + jqXHR.responseText);
		}
	}
});

Через $.ajaxSetup можно задать обработчик ошибок для всех AJAX-запросов на сайте.

JS
$.ajaxSetup({
	error: function (jqXHR, exception) {
		...
	}
});

Источник: © https://snipp.ru/jquery/ajax-jquery
Дата публикации: 

ТОП 10 случайных публикаций



Сайт разработан студией © WEB-VidST   


Яндекс.Метрика