Поиск…


Синтаксис

  • prom = fetch (url). then (function (response) {})
  • prom = fetch (url, options)
  • обещание = выборка (запрос)

параметры

Опции подробности
method Метод HTTP для использования для запроса. ex: GET , POST , PUT , DELETE , HEAD . По умолчанию GET .
headers Объект Headers содержащий дополнительные заголовки HTTP для включения в запрос.
body Полезная нагрузка запроса может быть string или объектом FormData . По умолчанию undefined
cache Режим кеширования. default , reload , no-cache
referrer Ссылка на запрос.
mode cors , no-cors , same-origin . По умолчанию no-cors .
credentials omit , то same-origin , include . По умолчанию omit .
redirect follow , error , manual . По умолчанию следует follow .
integrity Связанные метаданные целостности. По умолчанию пустая строка.

замечания

Стандарт Fetch определяет запросы, ответы и процесс, который их связывает: выборка.

Среди других интерфейсов стандарт определяет объекты Request и Response , предназначенные для всех операций, связанных с сетевыми запросами.

Полезным приложением этих интерфейсов является GlobalFetch , который можно использовать для загрузки удаленных ресурсов.

Для браузеров, которые еще не поддерживают стандарт Fetch, GitHub имеет доступный полиполк . Кроме того, существует также реализация Node.js, которая полезна для согласованности между сервером и клиентом.

В отсутствие отмененных обещаний вы не можете прервать запрос на выборку ( проблема github ). Но есть предложение T39 на первом этапе для отмененных обещаний.

GlobalFetch

Интерфейс GlobalFetch предоставляет функцию fetch , которая может использоваться для запроса ресурсов.

fetch('/path/to/resource.json')
    .then(response => {
        if (!response.ok()) {
            throw new Error("Request failed!");
        }
            
        return response.json();
    })
    .then(json => { 
        console.log(json);
    }); 

Разрешенное значение - это объект ответа . Этот объект содержит тело ответа, а также его статус и заголовки.

Установить заголовки запросов

fetch('/example.json', {
    headers: new Headers({
        'Accept': 'text/plain',
        'X-Your-Custom-Header': 'example value'
    })
});

Данные POST

Данные формы проводки

fetch(`/example/submit`, {
    method: 'POST',
    body: new FormData(document.getElementById('example-form'))
});

Проводка данных JSON

fetch(`/example/submit.json`, {
    method: 'POST',
    body: JSON.stringify({
        email: document.getElementById('example-email').value,
        comment: document.getElementById('example-comment').value
    })
});

Функция fetch не отправляет файлы cookie по умолчанию. Существует два способа отправки файлов cookie:

  1. Отправляйте файлы cookie только в том случае, если URL-адрес находится в том же месте, что и вызывающий скрипт.
fetch('/login', {
    credentials: 'same-origin'
})
  1. Всегда отправляйте файлы cookie, даже для вызовов с перекрестным происхождением.
fetch('https://otherdomain.com/login', {
    credentials: 'include'
})

Получение данных JSON

// get some data from stackoverflow
fetch("https://api.stackexchange.com/2.2/questions/featured?order=desc&sort=activity&site=stackoverflow")
  .then(resp => resp.json())
  .then(json => console.log(json))
  .catch(err => console.log(err));

Использование Fetch для отображения вопросов из API переполнения стека

const url =
      'http://api.stackexchange.com/2.2/questions?site=stackoverflow&tagged=javascript';

const questionList = document.createElement('ul');
document.body.appendChild(questionList);

const responseData = fetch(url).then(response => response.json());
responseData.then(({items, has_more, quota_max, quota_remaining}) => {
  for (const {title, score, owner, link, answer_count} of items) {
    const listItem = document.createElement('li');
    questionList.appendChild(listItem);
    const a = document.createElement('a');
    listItem.appendChild(a);
    a.href = link;
    a.textContent = `[${score}] ${title} (by ${owner.display_name || 'somebody'})`
  }
});


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow