Szukaj…


Składnia

  • promise = fetch (url) .then (function (response) {})
  • obietnica = pobierz (adres URL, opcje)
  • obietnica = pobierz (żądanie)

Parametry

Opcje Detale
method Metoda HTTP używana w żądaniu. np .: GET , POST , PUT , DELETE , HEAD . Domyślnie GET .
headers Obiekt Headers zawierający dodatkowe nagłówki HTTP do uwzględnienia w żądaniu.
body Ładunek żądania może być string lub obiektem FormData . Domyślnie jest undefined
cache Tryb buforowania. default , reload , no-cache
referrer Strona odsyłająca zapytania.
mode cors , no-cors , tego same-origin . Domyślnie no-cors .
credentials omit , to same-origin , include . Domyślnie omit .
redirect follow , error , manual . Domyślne do follow .
integrity Powiązane metadane dotyczące integralności. Domyślnie pusty ciąg.

Uwagi

Standard Fetch definiuje żądania, odpowiedzi i proces, który je wiąże: pobieranie.

Wśród innych interfejsów, Standard definiuje Request i Response obiekty, przeznaczone do stosowania dla wszystkich operacji dotyczących żądania sieciowe.

Przydatnym zastosowaniem tych interfejsów jest GlobalFetch , którego można używać do ładowania zdalnych zasobów.

W przypadku przeglądarek, które nie obsługują jeszcze standardu Fetch, GitHub udostępnia polifill . Ponadto istnieje również implementacja Node.js, która jest przydatna dla spójności serwera / klienta.

W przypadku braku możliwych do anulowania obietnic nie można przerwać żądania pobierania ( problem z github ). Ale na etapie 1 jest propozycja T39 dotycząca obietnic, które można anulować.

GlobalFetch

Interfejs GlobalFetch udostępnia funkcję fetch , której można użyć do żądania zasobów.

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

Rozdzielona wartość jest obiektem odpowiedzi . Ten obiekt zawiera treść odpowiedzi, a także jej status i nagłówki.

Ustaw nagłówki żądań

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

Wysłać dane

Publikowanie danych formularza

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

Publikowanie danych JSON

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

Wyślij ciasteczka

Funkcja pobierania domyślnie nie wysyła plików cookie. Istnieją dwa sposoby wysyłania plików cookie:

  1. Pliki cookie wysyłaj tylko wtedy, gdy adres URL jest tego samego źródła co skrypt wywołujący.
fetch('/login', {
    credentials: 'same-origin'
})
  1. Zawsze wysyłaj pliki cookie, nawet w przypadku połączeń z innego kraju.
fetch('https://otherdomain.com/login', {
    credentials: 'include'
})

Pobieranie danych 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));

Korzystanie z funkcji pobierania do wyświetlania pytań z interfejsu API przepełnienia stosu

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow