Автор оригинала: Arpan Abhishek.
Вступление
API JavaScript Precte позволяет нам отправлять HTTP-запросы. С тех пор это была стандартная часть JavaScript с Ecmascript 2015 (Обычно известный как ES6) был введен и использует обещания.
Эта статья сначала покажет вам, как были сделаны запросы с ванильным JavaScript до того, как был разработан API Fetch. Затем мы будем руководить вами о том, как использовать API Fetch, подчеркивая, сколько улучшения он является над другими методами.
Настраивать
Эта статья смотрит на использование API Fetch, чтобы сделать HTTP-запросы в браузере. Таким образом, нам нужно настроить HTML-страницу, которую можно отобразить наш браузер. В вашем рабочем пространстве начать с создания index.html
файл.
index.html
Файл будет использоваться по всей статье. Страница HTML не имеет текстового контента, он будет использоваться только для загрузки файлов JS, чтобы мы могли видеть запросы и ответы в консоли нашего браузера:
JavaScript HTTP Requests
Мы изменим Сценарий
Тег Когда мы изучаем новые темы, но остальная часть HTML останется прежней.
Вы также хотите открыть консоль браузера, чтобы мы могли видеть результаты наших HTTP-запросов. Обычно это делается, щелкнув правой кнопкой мыши на веб-странице и выбирая «проверку». На хроме это выглядит так:
Теперь давайте выберем вкладку «Консоль», чтобы мы могли видеть любой выход, который наши журналы JavaScript:
Вы все настроили! Давайте начнем отправлять HTTP-запросы с первым методом возможным с JavaScript – XMLHTTPREQUEST Отказ
Запросы с XMLHTTPREQUEST.
До того, как существовала PRETCE API, все запросы на JavaScript были сделаны с помощью XMLHTTPREQUEST
(или XHR
) объект. Несмотря на свое имя, этот объект может получать данные в любом формате с сервера. Это не просто ограничено XML.
Давайте получим руки с помощью запроса XHR в нашем браузере. В той же папке, что и ваша index.html
Файл, создайте новый xhr.js
файл.
Этот новый файл JavaScript создаст объект XHR и отправить Получить
Запрос на JSON API. Затем мы будем регистрировать результаты запроса в консоли. В вашем xhr.js
Файл, введите следующее:
let xhr = new XMLHttpRequest(); xhr.open('get', 'https://jsonplaceholder.typicode.com/posts/1'); xhr.send(); xhr.onload = function() { console.log(xhr.response); };
В первой строке мы создали новый XMLHTTPREQUEST
объект. Затем мы использовали Открыть ()
Способ создания нового HTTP-запроса. Первый аргумент Открыть ()
это метод HTTP по запросу – в этом случае мы отправляем Получить
запрос. Второй аргумент – это URL с помощью ресурса сервера, который мы хотим. Затем мы используем Отправить ()
Метод для отправки запроса.
Когда XHR
Успешно получает данные из сети, она отправляет нагрузка мероприятие. Для обработки данных после его загрузки мы установили функцию для oepload
Собственность XHR
объект. В этом случае мы просто регистрируем ответ на консоль.
Теперь в вашей консоли разработчики вы должны увидеть следующее.
Хорошая работа по созданию запроса API с XMLHTTPREQUEST
!
В то время как обслуживает, как он обрабатывает асинхронные данные, сильно отличается от организованных и стандартизированных обещаний, используемых в современном JavaScript. Мы можем поддерживать более легкий код с API Fetch.
API
PRETCH API – это API на основе обещания для создания HTTP-запросов, похоже на то, что мы использовали XMLHTTPREQUEST
Отказ В отличие от XMLHTTPREQUEST
Нам не нужно создавать новые объекты при использовании API Fetch. Браузеры поставляются с глобальным fetch ()
Функция, которую мы можем использовать, чтобы сделать запросы.
Давайте посмотрим, как мы можем использовать эту API, чтобы сделать HTTP-запросы через Интернет.
Отправка запросов с Fetch
API Fetch может сделать Получить
, Пост
, Поставить
, Патч
, Удалить
и Другие виды HTTP-запросов Отказ Мы сосредоточимся на двух наиболее распространенных методах, используемых в форматах HTTP: Получить
и Пост
Отказ
Получить запросы
Давайте использовать Fetch API, чтобы сделать Получить
Запрос на https://jsonforkholder.typicode.com/posts/1
Как мы сделали с XMLHTTPREQUEST
ранее.
В вашем index.html
Файл, изменить Сценарий
Тег для ссылки на новый файл JavaScript:
Теперь создайте новый fetchget.js
файл в том же рабочем пространстве. Мы будем отправлять Получить
Запросите и снова введите вывод на консоль. Введите следующий код в fetchget.js
:
fetch('https://jsonplaceholder.typicode.com/posts/1') .then(response => response.json()) .then(json => console.log(json));
В первой строке мы используем глобальные fetch ()
Функция для отправки Получить
Запрос на нашу API. Аргумент fetch ()
это URL с сервером-боковым ресурсом.
Затем мы цепи о обещании с тогда ()
Метод, который захватывает ответ HTTP в ответ
аргумент и позвоните его JSON ()
метод. JSON ()
Метод определяет тело ответ на объект JSON. Однако он возвращает, что как обещание.
Вот почему мы используем тогда ()
Опять же, чтобы цепить другое обещание, которое входит в проанализированные JSON к консоли.
Перезагрузить index.html
При необходимости, чтобы вы могли видеть следующий вывод:
Примечание : Вывод будет выглядеть по-другому для того, что мы получили, когда мы сделали Получить
Запрос с XMLHTTPREQUEST
Отказ Это потому, что XMLHTTPREQUEST
Возвращает данные отклика HTTP в виде строки, тогда как мы проанализировали данные на объект JSON. Хотя возвращенные форматы разные, их содержимое одинаково.
Давайте посмотрим, как мы можем использовать fetch ()
отправлять данные в Пост
запрос.
Опубликовать запросы
Мы можем загружать данные с fetch ()
Добавляя объект JavaScript в качестве второго аргумента с необходимой информацией для отправки HTTP-запроса.
Давайте использовать fetch ()
Загрузить данные JSON в Пост
Запрос на макет API. В вашем index.html
Файл, изменить Сценарий
Тег для ссылки на новый файл JavaScript:
Теперь создайте fetch post.js
в вашем рабочем пространстве, чтобы мы могли сделать Пост
Запрос на API, который загрузит новый товар для объекта JSON. Введите код ниже в fetch post.js
:
const todo = { title: 'Some really important work to finish' }; fetch('https://jsonplaceholder.typicode.com/todos', { method: 'POST', body: JSON.stringify(todo), headers: { 'Content-type': 'application/json; charset=UTF-8' } }) .then(response => response.json()) .then(json => { console.log(json); });
Первое, что мы делаем, это создать Todo
Объект, который содержит данные, которые мы хотели бы отправить на API.
Как с Получить
Запросы, мы используем fetch ()
Предоставляя URL API, мы хотим достичь. Однако на этот раз у нас есть объект в качестве второго аргумента для fetch ()
со следующими свойствами:
Метод
: Строка, которая указывает с методом HTTP для использования в запросеТело
: Строка с любыми данными, которые мы хотим дать серверу в нашем запросеЗаголовки
: Объект, который позволяет нам добавлять любые заголовки, мы хотим, чтобы наши HTTP-запросы включают
Как с Получить
Запрос, мы обработаем ответ сервера как JSON и вхожу в систему на консоль разработчика. Перезагрузка нашего index.html
следует показать нам следующий выход консоли:
Отличная работа, используя fetch ()
Чтобы загрузить данные через Пост
запрос!
Теперь, когда у нас есть дескриптор для создания различных HTTP-запросов с API Fetch, давайте посмотрим, как мы можем обрабатывать разные ответы HTTP.
Обработка ответов с получением
До сих пор мы разбираем данные ответа JSON. Хотя это работает с API, используемым в примере, другой ответ может вернуть различные типы данных не json.
Объект HTTP ответ, который возвращается после успешного fetch ()
Запросы могут быть проанализированы на различные форматы. В дополнение к JSON ()
Метод, мы можем использовать следующее:
Текст ()
: Возвращает ответ как строковые данныеBLOB ()
: Возвращает ответ в виде объекта BLOB (двоичные данные вместе с его кодировкой)formdata ()
: Верните ответ какFormdata
объект (который хранит пары ключа-значений строковых данных)ArrayBuffer ()
: Верните ответ какArrayBuffer
(низкоуровневое представление двоичных данных)
Как JSON ()
Метод, эти функции возвращают обещание с контентом. Поэтому они все должны быть прикованы к тогда ()
Функция, поэтому содержимое может быть обработано.
Эти функции используются для обработки успешных откликов HTTP, которые возвращают данные. Давайте теперь посмотрим и как мы можем обрабатывать ошибки с API Fetch.
Обработка ошибок HTTP
Как с любым другим обещанием, fetch ()
Ошибки обрабатываются в поймать ()
Метод, который помещен в конце цепочки обещания. Тем не менее, поймать ()
Функция используется только если fetch ()
не мог отправить запрос. Это обычно означает, что произошла сетевая ошибка.
Если мы попытаемся получить доступ к URL-адресу, которое не существует, и сервер возвращает 404, он не будет пойман в поймать ()
Метод, как 404 – это действительный статус ответа HTTP.
Следовательно, при обработке ошибок с API Fetch нам нужно сделать две вещи:
- Включить
поймать ()
пункт в конце цепочки обещания, чтобы забрать любые сетевые ошибки - Проверьте код состояния HTTP ответа, чтобы увидеть, было ли это успешно или нет.
Давайте сделаем еще один пример, где мы пытаемся получить URL, который не существует.
Используя наши Получить
Пример запроса мы можем использовать поймать ()
как это:
fetch('https://jsonplaceholder.typicode.com/posts/1') .then(response => response.json()) .then(json => console.log(json)) .catch(err => console.error(err));
Тем не менее, поймать ()
Функция используется только в том случае, если fetch ()
Запрос не может быть отправлен. В вашем index.html
Файл, измените тег скрипта, чтобы ссылаться на новый файл JavaScript:
Теперь в вашем рабочем пространстве создайте новый fetcheRor.js
файл. Введите следующий код:
fetch("https://jsonplaceholder.typicode.com/notreal/") .then(response => { if (!response.ok) { throw new Error("Could not reach website."); } return response.json(); }) .then(json => console.log(json)) .catch(err => console.error(err));
Мы начинаем с отправки Получить
запросить несуществующий URL на этом API. Обратите внимание на изменение первого тогда ()
Функция, которая анализирует тело ответа к JSON:
if (!response.ok) { throw new Error("Could not reach website."); }
Мы проверяем Хорошо
Собственность, логическое. Это правда
Если код состояния HTTP от ответа между 200-299 годов. Используя не Оператор ( !
), мы можем захватить случаи, когда сервер вернул ошибку HTTP. Если мы получим ошибку HTTP, мы бросаем пользовательскую ошибку, которая закончила бы fetch ()
цепь обещания.
Если мы не получили ошибку HTTP, мы возвращаем ответ JSON как обещание, как и ранее.
В конце цепочки обещания у нас есть поймать ()
Функция, которая просто регистрирует ошибку к консоли.
Если вы перезаряжете свой index.html
Страница, вы должны увидеть этот консольный выход:
Хорошо сделано, вы охватывали основы Fetch API.
Заключение
PRETCH API обеспечивает обещанный способ отправки HTTP-запросов в JavaScript. Потому что это основано на обещании, разработчики видят это как очиститель для XMLHTTPREQUEST
Отказ
С fetch ()
Функция, мы можем сделать Получить
и Пост
запросы на разные URL. Мы можем настроить fetch ()
Запросы на использование любого метода HTTP, который мы хотим использовать.
fetch ()
Функция также предоставляет ответ
Объект, который можно проанализировать в различные форматы. К ним относятся JSON, TEXT и BYTES, чтобы назвать несколько.
Мы также видели, как мы можем обрабатывать ошибки при проведении запросов с fetch ()
Отказ Помимо положения поймать ()
Способ в конце цепочки обещания для получения сетевых ошибок, мы также должны проверять код состояния отклика HTTP, который мы получили до анализа его данных.
API Fetch делает внешние API вызовы управляемыми без использования внешних библиотек. Какие API вы планируете получить доступ к fetch ()
?