AJAX на чистом JS
Урок 2
В этом видеоуроке покажу, как писать AJAX-запросы для WordPress без использования jQuery.
Иногда бывает так, что ваша тема WordPress не использует jQuery и возможно, что ради вашего AJAX-запроса его подключать и не нужно.
Чтобы скачать готовый код из этого урока, вам нужно купить курс.
Конечно, когда мы отключим jQuery, нам придётся переписать не только код, связанный с AJAX-запросами, но и целиком весь остальной тоже. Обо всём этом подробно рассказываю в видео, тут же хотел чуть подробнее остановиться на том, как работает XMLHttpRequest.
Итак, для того, чтобы совершить запрос при помощи XMLHttpRequest, нужно выполнить следующие шаги:
XMLHttpRequest
.let trueRequest = new XMLHttpRequest();
XMLHttpRequest
и содержит параметрыtrueRequest.open(method, URL, [async, user, password])
POST
или GET
.?action=truemisha
(кстати, если не передать или передать экшен неправильно, то есть риск словить ошибку 400).true
– асинхронный запрос (то, что нам нужно), false
– синхронный.trueRequest.send( data );
В data
мы можем передать какие-нибудь данные в AJAX-обработчик, но это делать не обязательно. Подробнее про передачу данных из формы в видеоуроке.
trueRequest.onload = function() { var result = this.response; };
Тут мы слушаем событие onload
, которое срабатывает при получении какого-либо ответа. Обратите внимание, что сюда также приходят и ответы с HTTP-ошибками, например ошибки 404 или 503, которые можно проверить через this.status
.
С jQuery:
$.ajax({ type: 'POST', url: 'admin-ajax.php', data: data });
Без jQuery:
var trueRequest = new XMLHttpRequest(); trueRequest.open( 'POST', 'admin-ajax.php', true ); trueRequest.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8' ); trueRequest.send( data );
С jQuery:
$.ajax({ type: 'GET', url: 'admin-ajax.php', success: function( result ) { // выполняем что-то в случае успеха } });
Без jQuery:
var trueRequest = new XMLHttpRequest(); trueRequest.open('GET', 'admin-ajax.php', true); trueRequest.onload = function() { var result = this.response; }; trueRequest.send();