Fetch API
Fetch API предоставляет интерфейс для получения ресурсов (в том числе по сети). Он покажется знакомым любому, кто использовал XMLHttpRequest, но новый API является более мощным и гибким набором функций.
Определения и использование
Fetch обеспечивает обобщённое определение объектов Request и Response (и других вещей, связанных с сетевыми запросами). Это позволит им использоваться везде, где необходимо в будущем, в том числе и для service workers, Cache API и других подобных технологий, которые обрабатывают или изменяют запросы (requests) и ответы (responses), а так же в любых других случаях, которые могут потребовать от вас генерировать свой собственный ответ программно.
Это также предоставляет определение в отношение таких понятий, как CORS и семантика заголовков HTTP origin, заменяя их обособленные определения где бы то ни было.
Чтобы создать запрос и получить данные, используется метод GlobalFetch.fetch. Он реализован во множестве интерфейсов, в том числе в Window и WorkerGlobalScope. Это позволяет использовать его практически в любом контексте для получения данных.
Метод fetch() принимает один обязательный аргумент — путь к данным, которые вы хотите получить. Он возвращает promise, который разрешается в (Response) независимо от того, был ли запрос удачным. Вы можете также передать во втором аргументе необязательный объект с указанием опций (см. Request.)
Как только Response выполнится успешно, становятся доступными несколько методов для определения тела контента и, как его содержимое должно быть обработано (см. Body.)
Вы можете создавать запрос и ответ непосредственно, используя конструкторы Request() и Response(), но маловероятно, что в этом есть необходимость. Напротив, более вероятно, что они будут созданы как результат работы другого API (например, FetchEvent.respondWith в service workers.)
Отличия от jQuery
Спецификации fetch() отличаются от jQuery.ajax() тремя основными способами:
- Промис, возвращённый из
fetch(), не будет отвергнут при статусе ошибки HTTP, даже если ответ является HTTP404или500. Вместо этого, оно будет разрешаться нормально (со статусомokустановленным вfalse), и будет отклоняться только при сбое в сети или если что-то помешало завершению запроса. fetch()может получать межсайтовые куки-файлы; таким образом вы можете установить межсайтовую сессию используяfetch.fetch()не будет посылать куки-файлы, если только не указаноcredentials: 'same-origin'.
Примечание: Узнайте больше об использовании Fetch API на Using Fetch и изучите концепции на Fetch basic concepts.
Прерывание выборки
Браузеры начали добавлять экспериментальную поддержку для AbortController и AbortSignal интерфейсов (aka The Abort API), которые позволяют прерывать операции, такие как Fetch и XHR, если они ещё не завершены. Подробности смотрите на страницах интерфейсов.
Fetch интерфейсы
GlobalFetch-
Содержит метод
fetch(), используемый для получения ресурсов. Headers-
Представляет заголовки запроса/ответа, позволяет запрашивать данные и выполнять различные действия в зависимости от результата.
Request-
Запрашивает ресурс.
Response-
Представляет ответ на запрос.
Fetch примесь
Body-
Предоставляет методы, относящиеся к телу запроса/ответа, позволяя вам определять content-type и то, как ответ должен быть обработан.
Спецификации
| Specification |
|---|
| Fetch> # fetch-method> |
| Fetch> # deferred-fetch> |