- Основы XMLHttpRequest
- Пример использования
- Настроить: open
- Отослать данные: send
- Отмена: abort
- Ответ: status, statusText, responseText
- Синхронные и асинхронные запросы
- How to Send Query Params in GET and POST in JavaScript
- How to Send Query Parameters in GET
- Recommended
- How To Create a Toggleable FAQ Component in React
- 2 Easy Ways to Export HTML Tables to Excel
- How to Create Prefilled Email Links in HTML
- Javascript get запрос параметры
- Анимация набора текста на jQuery
- Временная шкала на jQuery
- Заметка: Перезагрузка и редирект на JavaScript
- Рисуем диаграмму Ганта
- AJAX и PHP: загрузка файла
- Stimed — стили в зависимости от времени суток
Основы XMLHttpRequest
Материал на этой странице устарел, поэтому скрыт из оглавления сайта.
Более новая информация по этой теме находится на странице https://learn.javascript.ru/xmlhttprequest.
Объект XMLHttpRequest (или, как его кратко называют, «XHR») даёт возможность из JavaScript делать HTTP-запросы к серверу без перезагрузки страницы.
Несмотря на слово «XML» в названии, XMLHttpRequest может работать с любыми данными, а не только с XML.
Использовать его очень просто.
Пример использования
Как правило, XMLHttpRequest используют для загрузки данных.
Для начала посмотрим на пример использования, который загружает файл phones.json из текущей директории и выдаёт его содержимое:
// 1. Создаём новый объект XMLHttpRequest var xhr = new XMLHttpRequest(); // 2. Конфигурируем его: GET-запрос на URL 'phones.json' xhr.open('GET', 'phones.json', false); // 3. Отсылаем запрос xhr.send(); // 4. Если код ответа сервера не 200, то это ошибка if (xhr.status != 200) < // обработать ошибку alert( xhr.status + ': ' + xhr.statusText ); // пример вывода: 404: Not Found >else < // вывести результат alert( xhr.responseText ); // responseText -- текст ответа. >
var http = require('http'); var url = require('url'); var querystring = require('querystring'); var static = require('node-static'); var file = new static.Server('.', < cache: 0 >); function accept(req, res) < if (req.url == '/phones.json') < // искусственная задержка для наглядности setTimeout(function() < file.serve(req, res); >, 2000); > else < file.serve(req, res); >> // ------ запустить сервер ------- if (!module.parent) < http.createServer(accept).listen(8080); >else
Далее мы более подробно разберём основные методы и свойства объекта XMLHttpRequest , в том числе те, которые были использованы в этом коде.
Настроить: open
xhr.open(method, URL, async, user, password)
Этот метод – как правило, вызывается первым после создания объекта XMLHttpRequest .
Задаёт основные параметры запроса:
- method – HTTP-метод. Как правило, используется GET либо POST, хотя доступны и более экзотические, вроде TRACE/DELETE/PUT и т.п.
- URL – адрес запроса. Можно использовать не только http/https, но и другие протоколы, например ftp:// и file:// . При этом есть ограничения безопасности, называемые «Same Origin Policy»: запрос со страницы можно отправлять только на тот же протокол://домен:порт , с которого она пришла. В следующих главах мы рассмотрим, как их можно обойти.
- async – если установлено в false , то запрос производится синхронно, если true – асинхронно.
«Синхронный запрос» означает, что после вызова xhr.send() и до ответа сервера главный поток будет «заморожен»: посетитель не сможет взаимодействовать со страницей – прокручивать, нажимать на кнопки и т.п. После получения ответа выполнение продолжится со следующей строки.
«Асинхронный запрос» означает, что браузер отправит запрос, а далее результат нужно будет получить через обработчики событий, которые мы рассмотрим далее.
Заметим, что вызов open , в противоположность своему названию ( open – англ. «открыть») не открывает соединение. Он лишь настраивает запрос, а коммуникация инициируется методом send .
Отослать данные: send
Именно этот метод открывает соединение и отправляет запрос на сервер.
В body находится тело запроса. Не у всякого запроса есть тело, например у GET-запросов тела нет, а у POST – основные данные как раз передаются через body .
Отмена: abort
Вызов xhr.abort() прерывает выполнение запроса.
Ответ: status, statusText, responseText
Основные свойства, содержащие ответ сервера:
status HTTP-код ответа: 200 , 404 , 403 и так далее. Может быть также равен 0 , если сервер не ответил или при запросе на другой домен. statusText Текстовое описание статуса от сервера: OK , Not Found , Forbidden и так далее. responseText Текст ответа сервера.
Есть и ещё одно свойство, которое используется гораздо реже:
Если сервер вернул XML, снабдив его правильным заголовком Content-type: text/xml , то браузер создаст из него XML-документ. По нему можно будет делать запросы xhr.responseXml.querySelector(«. «) и другие.
Оно используется редко, так как обычно используют не XML, а JSON. То есть, сервер возвращает JSON в виде текста, который браузер превращает в объект вызовом JSON.parse(xhr.responseText) .
Синхронные и асинхронные запросы
Если в методе open установить параметр async равным false , то запрос будет синхронным.
Синхронные вызовы используются чрезвычайно редко, так как блокируют взаимодействие со страницей до окончания загрузки. Посетитель не может даже прокручивать её. Никакой JavaScript не может быть выполнен, пока синхронный вызов не завершён – в общем, в точности те же ограничения как alert .
// Синхронный запрос xhr.open('GET', 'phones.json', false); // Отсылаем его xhr.send(); // . весь JavaScript "подвиснет", пока запрос не завершится
Если синхронный вызов занял слишком много времени, то браузер предложит закрыть «зависшую» страницу.
Из-за такой блокировки получается, что нельзя отослать два запроса одновременно. Кроме того, забегая вперёд, заметим, что ряд продвинутых возможностей, таких как возможность делать запросы на другой домен и указывать таймаут, в синхронном режиме не работают.
Из всего вышесказанного уже должно быть понятно, что синхронные запросы используются чрезвычайно редко, а асинхронные – почти всегда.
Для того, чтобы запрос стал асинхронным, укажем параметр async равным true .
var xhr = new XMLHttpRequest(); xhr.open('GET', 'phones.json', true); xhr.send(); // (1) xhr.onreadystatechange = function() < // (3) if (xhr.readyState != 4) return; button.innerHTML = 'Готово!'; if (xhr.status != 200) < alert(xhr.status + ': ' + xhr.statusText); >else < alert(xhr.responseText); >> button.innerHTML = 'Загружаю. '; // (2) button.disabled = true;
Если в open указан третий аргумент true (или если третьего аргумента нет), то запрос выполняется асинхронно. Это означает, что после вызова xhr.send() в строке (1) код не «зависает», а преспокойно продолжает выполняться, выполняется строка (2) , а результат приходит через событие (3) , мы изучим его чуть позже.
How to Send Query Params in GET and POST in JavaScript
To send query parameters in a POST request in JavaScript, we need to pass a body property to the configuration object of the Fetch API that matches the data type of the «Content-Type» header.
(async () => const response = await fetch('https://jsonplaceholder.typicode.com/posts', method: 'POST', body: JSON.stringify( title: 'This will be the title', body: 'Setting the body property', userId: 1, >), headers: 'Content-type': 'application/json; charset=UTF-8' >, >) const data = await response.json() console.log(data) >)()
The body will always need to match the «Content-type» header.
Notice that you will also need to set the method property to «POST». Make sure you wrap your object into JSON.stringify in order to pass a proper JSON payload.
We can wrap the entire call into an async IIFE in order to use await . We can also create a helper function for later use that expects a URL and an object for the query parameters:
const post = async (url, params) => const response = await fetch(url, method: 'POST', body: JSON.stringify(params), headers: 'Content-type': 'application/json; charset=UTF-8', > >) const data = await response.json() return data > // Then use it like so with async/await: (async () => const data = await post('https://jsonplaceholder.typicode.com/posts', title: 'This will be the title', body: 'Setting the body property', userId: 1 >) console.log(data) >)() // Or using then: post('https://jsonplaceholder.typicode.com/posts', title: 'This will be the title', body: 'Setting the body property', userId: 1, >).then(data => console.log(data))
Then we can call it either using async/await , or using a then callback.
Level up your skills and master the art of frontend development with bite-sized tutorials.
We don’t spam. Unsubscribe anytime.
Looking to improve your skills? Check out our interactive course to master JavaScript from start to finish.
How to Send Query Parameters in GET
To send query parameters in a GET request in JavaScript, we can pass a list of search query parameters using the URLSearchParams API.
(async () => const response = await fetch('https://jsonplaceholder.typicode.com/comments?' + new URLSearchParams( postId: 1 >)) const data = await response.json() console.log(data) >)()
This will convert the object into a string with key-value pairs. Eg, the above example would become » postId=1 «. Notice that here, you don’t need to pass a method property for the Fetch API, as it uses GET by default. We can also use a helper function for this one too to make the call reusable:
const get = async (url, params) => const response = await fetch(url + '?' + new URLSearchParams(params)) const data = await response.json() return data > // Call it with async: (async () => const data = await get('https://jsonplaceholder.typicode.com/comments', postId: 1, >) console.log(data) >)() // Calling it with then: get('https://jsonplaceholder.typicode.com/comments', postId: 1, >).then(data => console.log(data))
📚 More Webtips
Level up your skills and master the art of frontend development with bite-sized tutorials.
We don’t spam. Unsubscribe anytime.
- Unlimited access to hundreds of tutorials
- Access to exclusive interactive lessons
- Remove ads to learn without distractions
Recommended
How To Create a Toggleable FAQ Component in React
2 Easy Ways to Export HTML Tables to Excel
How to Create Prefilled Email Links in HTML
Get access to 300+ webtips 💌
Level up your skills and master the art of frontend development with bite-sized tutorials.
We don’t spam. Unsubscribe anytime.
Javascript get запрос параметры
Частная коллекция качественных материалов для тех, кто делает сайты
- Creativo.one2000+ уроков по фотошопу
- Фото-монстр300+ уроков для фотографов
- Видео-смайл200+ уроков по видеообработке
- Жизнь в стиле «Кайдзен» Техники и приемы для гармоничной и сбалансированной жизни
В этой рубрике Вы найдете уроки по Javascript библиотеке jQuery.
Анимация набора текста на jQuery
Сегодня мы бы хотели вам рассказать о библиотеке TypeIt — бесплатном jQuery плагине. С её помощью можно имитировать набор текста. Если всё настроить правильно, то можно добиться очень реалистичного эффекта.
Временная шкала на jQuery
Заметка: Перезагрузка и редирект на JavaScript
Быстрая заметка, где вы сможете найти парочку JS сниппетов для перезагрузки и перенаправления пользователей через JavaScript.
Рисуем диаграмму Ганта
AJAX и PHP: загрузка файла
Stimed — стили в зависимости от времени суток
Интересная библиотека с помощью которой можно задать определённым элементам страницы особые стили в зависимости от времени суток.