2016-09-19 36 views
10

wiem, że z nowym Fetch API (stosowane tu z ES2017 na async/await) można wykonać żądania GET takiego:Zapytanie POST za pomocą interfejsu API pobierania?

async getData() { 
    try { 
     let response = await fetch('https://example.com/api'); 
     let responseJson = await response.json(); 
     console.log(responseJson); 
    } catch(error) { 
     console.error(error); 
    } 
} 

Ale w jaki sposób uczynić żądania POST?

+2

Ty utożsamiając dwie różne rzeczy tam: zbliżający 'async' /' await' jest obsługa JavaScript i (całkowicie oddzielne) [Fetch API] (https://fetch.spec.whatwg.org/). Twoje pytanie nie ma nic wspólnego z JavaScript '' async'/'await', chodzi o' pobieranie '. (Zwróć też uwagę, że nowe API Fetch jest dokładnie tym, co nowe, więc [obsługa ogranicza się do nowatorskich przeglądarek] (http://caniuse.com/#feat=fetch).) –

+0

@ jfriend00: Zrobiłem to dla im. –

Odpowiedz

23

Krótko mówiąc, Fetch pozwala również przekazać obiekt do bardziej spersonalizowaną prośbę:

fetch("http://example.com/api/endpoint/", { 
    method: "post", 
    headers: { 
    'Accept': 'application/json', 
    'Content-Type': 'application/json' 
    }, 

    //make sure to serialize your JSON body 
    body: JSON.stringify({ 
    name: myName, 
    password: myPassword 
    }) 
}) 
.then((response) => { 
    //do something awesome that makes the world a better place 
}); 

Sprawdź dokumentację pobierał jeszcze więcej bajerów i pułapek:

https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch

Zauważ, że skoro robisz asynchroniczny wzór try/catch, po prostu pominiesz funkcję then() w moim przykładzie;)

4

, jeśli chcesz wykonać proste żądanie pocztowe bez wysyłania danych jako JSON.

fetch("/url-to-post",{ 
     method: "POST", 
     //what ever data you want to post with key value pair   
     body: "name=manas&age=20", 
     headers: { 
      "Content-Type": "application/x-www-form-urlencoded" 
     }).then((response) => { 
     //do something awesome that makes the world a better place 
});