Поскольку IE5 был выпущен в 1998 году, у нас есть возможность сделать асинхронные сетевые звонки в браузере, используя XMLHTTPREQUEST (XHR) Отказ
Дополнительно через несколько лет после этого Gmail и другие богатые приложения стали тяжелым использованием его и сделали подход так популярным, что ему нужно было иметь имя: Ajax Отказ
Работая напрямую с XMLHTTPREQUEST всегда была болью, и она почти всегда была абстрагирована какой-то библиотекой. В частности, jQuery имеет свои собственные функции помощника, построенные вокруг него:
jquery.ajax ()jquery.get ()jquery.post ()
и так далее.
У них было огромное влияние на асинхронные звонки более доступными. В частности, они сосредоточились на старших браузерах, чтобы убедиться, что все все еще работало.
Fetch API был стандартизирован как современный подход к асинхронным сетевым запросам и использует Обещания как строительный блок.
Применение на момент написания (сен 2017) имеет хорошую поддержку по всему основным браузерам, кроме IE.
Polyfill Выпущено GitHub позволяет использовать извлекать на любом браузере.
Используя выборку
Начиная использовать Fetch для Получить Запросы очень просты:
fetch('/file.json')Вы уже используете его: fetch собирается сделать HTTP-запрос, чтобы получить file.json Ресурс на том же домене.
Как видите, извлекать Функция доступна в глобальном окно сфера.
Теперь давайте сделаем это немного более полезным, давайте на самом деле посмотрим, что содержимое файла:
fetch('./file.json') .then(response => response.json()).then(data => console.log(data))Призыв fetch () возвращает обещание. Мы можем дождаться обещания разрешить, передавая обработчик с тогда () метод обещания.
Этот обработчик получает возвращаемое значение извлекать Обещание, объект ответа.
Мы увидим этот объект более подробно в следующем разделе.
Ловить ошибки
С fetch () Возвращает обещание, мы можем использовать поймать Метод обещания перехватить любую ошибку, происходящую во время выполнения запроса, и обработка выполняется в тогда Обратные вызовы:
fetch('./file.json').then(response => { //...}.catch(err => console.error(err))Объект ответа
Объект ответа, возвращаемый fetch () Вызов содержит всю информацию о запросе и ответе на сетевой запрос.
Доступ к Заголовки Недвижимость на ответ Объект дает вам возможность просматривать заголовки HTTP, возвращаемые по запросу:
fetch('./file.json').then(response => { console.log(response.headers.get('Content-Type')) console.log(response.headers.get('Date'))})положение дел
Это свойство является целым числом, представляющим состояние ответа HTTP.
101,204,205или304этоНулевое телоположение дел200к299, включительно, этоХорошоСтатус (успех)301,302,303,307или308этоперенаправлять
fetch('./file.json') .then((response) => { console.log(response.status) })stustustext.
stustustext это свойство, представляющее собой сообщение о состоянии ответа. Если запрос успешен, статус IS Хорошо Отказ
fetch('./file.json') .then(response => console.log(response.statusText))урл
URL представляет полный URL свойства, которую мы получили.
fetch('./file.json') .then(response => console.log(response.url))Содержание тела
Ответ имеет тело, доступное с использованием Текст () или JSON () Методы, которые возвращают обещание.
fetch('./file.json').then(response => response.text()).then(body => console.log(body))fetch('./file.json').then(response => response.json()).then(body => console.log(body))То же самое можно написать с помощью ES2017 Async Функции :
(async () => { const response = await fetch('./file.json') const data = await response.json() console.log(data)})()Запрос объекта
Объект запроса представляет собой запрос ресурса, и он обычно создается с помощью Новый запрос () API.
Пример:
const req = new Request('/api/todos')Объект запроса предлагает несколько свойств только для чтения для проверки деталей запроса ресурсов, в том числе
Метод: метод запроса (Get, Post, Post и т. Д.)URL: URL запроса.Заголовки: связанные заголовки объекта запросаРеферер: реферер запросакэш: режим кэша запроса (например, по умолчанию, перезагрузку, без кэш).
И обнажает несколько методов, включая JSON () , Текст () и formdata () обрабатывать тело запроса.
Полное API можно найти здесь Отказ
Возможность установки заголовка HTTP-запроса имеет важное значение, а извлекать Дает нам возможность сделать это с помощью объектов заголовков:
const headers = new Headers()headers.append('Content-Type', 'application/json')или проще:
const headers = new Headers({ 'Content-Type': 'application/json' })Чтобы прикрепить заголовки к запросу, мы используем объект запроса и передайте его на fetch () вместо просто передавать URL.
Вместо того:
fetch('./file.json')мы делаем
const request = new Request('./file.json', { headers: new Headers({ 'Content-Type': 'application/json' }) }) fetch(request)
Объект заголовков не ограничивается установленными значениями, но мы также можем запросить его:
headers.has('Content-Type') headers.get('Content-Type')И мы можем удалить заголовок, который был ранее установлен:
headers.delete('X-My-Custom-Header')Опубликовать запросы
Fetch также позволяет использовать любой другой метод http в вашем запросе: post, put, delete или “.
Укажите метод в свойстве метода запроса и передайте дополнительные параметры в заголовке и в корпусе запроса:
Пример запроса пост:
const options = { method: 'post', headers: { "Content-type": "application/x-www-form-urlencoded; charset=UTF-8" }, body: 'foo=bar&test=1' } fetch(url, options) .catch((err) => { console.error('Request failed', err) })Как отменить запрос на выбор
В течение нескольких лет после извлекать Был введен, не было никакого способа прервать запрос после открытия.
Теперь мы можем, благодаря введению Abortcontroller и Abortsignal , универсальный API, чтобы уведомить прервать События
Вы интегрируете эту API, передавая сигнал в качестве параметра Fetch:
const controller = new AbortController()const signal = controller.signalfetch('./file.json', { signal })Вы можете установить тайм-аут, который загорел событие Abort через 5 секунд после начала запроса Fetch, чтобы отменить его:
setTimeout(() => controller.abort(), 5 * 1000)
Удобно, если Fetch уже вернулся, позвонив прервать () не вызывает никакой ошибки.
Когда происходит прерывание сигнала, Fetch отклонит обещание с Domexception назван AborpeRor :
fetch('./file.json', { signal }).then(response => response.text()).then(text => console.log(text)).catch(err => { if (err.name === 'AbortError') { console.error('Fetch aborted') } else { console.error('Another error', err) }})Оригинал: “https://www.freecodecamp.org/news/understanding-the-fetch-api-a7d4c08c2a7/”