2017-07-25 1 views
0

J'essaie de faire une requête POST en utilisant la méthode fetch de Javascript comme décrit here.Comment utiliser l'extraction de Javascript pour obtenir des données de demande POST?

Je reçois un ReadableStream au lieu d'une réponse habituelle json, comme ce que j'obtiendrais avec jQuery, Angular, peu importe.

Mon code est ici: https://jsbin.com/vuwilaviva/edit?css,js,output

var request = new Request('https://httpbin.org/post', { 
    method: 'POST', 
    mode: 'cors', 
    data: 'The sky is green', 
    redirect: 'follow', 
    headers: new Headers({ 
     'Content-Type': 'text/plain' 
    }) 
}); 


// Now use it! 
fetch(request).then(function(resp) { 
    console.log('Logging response...') 
    console.log(resp); 
}); 

Le critère d'évaluation de l'API test fonctionne bien avec postier, boucle, etc, donc je suis sûr que je me sers fetch mal, et ce n'est pas un problème avec l'API (il retourne juste ce que la chaîne est passée à comme data):

enter image description here

Modifier: la réponse actuelle ne reçoit pas les données retourné par la demande de poste - il est nulle part dans le json connecté:

enter image description here

+0

Vous passez des données dans la propriété 'body'. –

+0

Ce lien vous indique comment obtenir JSON à partir de la réponse, dans la section avec l'en-tête ** Manipulation JSON ** ... –

+0

@MikeMcCaughan Ne fonctionne pas. – VSO

Répondre

2

response.json doit être utilisé pour cette

fetch(request) 
.then(response => response.json()) 
.then(json => console.log(json)); 
+2

fait amusant: vous pouvez maintenant utiliser '. Then (console.log)' en chrome, peut-être d'autres (ils ont fixé 'this') – dandavis

+0

@pethel: Deux choses ici - 1. Cela ne me donne pas ce dont j'ai besoin - je ne vois pas la chaîne de réponse dans le json. 2. Pouvez-vous expliquer votre réponse, pourquoi les deux déclarations alors? L'appel n'est-il pas déjà asynchrone, pourquoi la réponse est-elle un flux? – VSO

+0

@VSO votre problème est le type de contenu response.json() -> response.text() maintenant et vous pouvez enregistrer le contenu sous forme de texte. Essayez de passer à application/json mais vous devez également ajuster votre code serveur car. – pethel