Rohkem
Tooge: POST json andmed
Ma püüan POSTIDA JSON-objekti, kasutades fetch.
Nagu ma aru saan, pean ma taotluse kehale lisama stringitud objekti, nt:
fetch("/echo/json/",
{
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
method: "POST",
body: JSON.stringify({a: 1, b: 2})
})
.then(function(res){ console.log(res) })
.catch(function(res){ console.log(res) })
Kui kasutan [jsfiddle's json echo][2], siis ootan, et näen tagasi objekti, mille olen saatnud ({a: 1, b: 2}
), kuid seda ei juhtu - chrome devtools ei näita isegi JSON-i kui taotluse osa, mis tähendab, et seda ei saadeta.
467
3
Koos ES2017
async/await
toega on see, kuidasPOST
ida JSON-saatelehte:Ei saa't kasutada ES2017? Vaata @vp_art's vastus kasutades lubadusi
Küsimus aga küsib probleemi, mille põhjuseks on a long since fixed chrome bug. Algne vastus järgneb.
See on siin tegelik probleem ja see'on chrome devtools'i viga, mis on parandatud Chrome 46-s.
See kood töötab hästi - see POSTib JSONi õigesti, seda lihtsalt ei ole näha.
mis'ei tööta, sest see ei ole JSfiddle's echo õige formaat.
[õige kood][5] on:
JSON-nõuete vastuvõtvate lõpp-punktide puhul on algne kood õige.
Otsingumootoritest sattusin sellesse teemasse mitte-json andmete postitamiseks fetchiga, seega mõtlesin, et lisan selle.
Sest non-json te ei' ei pea kasutama vormiandmeid. Võite lihtsalt määrata
Content-Type
päiseapplication/x-www-form-urlencoded
ja kasutada stringi:Alternatiivne viis selle
body
stringi koostamiseks, selle asemel, et kirjutada see välja, nagu ma eespool tegin, on kasutada raamatukogusid. Näiteks funktsioonistringify
pakettidestquery-string
võiqs
. Nii et seda kasutades näeks see välja järgmiselt:Pärast kulutada mõned ajad, reverse engineering jsFiddle, üritab genereerida kasuliku koormuse - on mõju.
Palun vaadake (ettevaatlikult) rida
return response.json();
, kus response ei ole vastus - see on lubadus.jsFiddle: http://jsfiddle.net/egxt6cpz/46/ && Firefox > 39 && Chrome > 42