2017-09-18 2 views
1

J'ai besoin de faire une demande de publication avec fetch comme ceci in Postman.Comment faire une demande de publication dans ReactNative avec formData

Et ce que j'ai essayé:

let formData = new FormData(); 
     formData.append('username', String(username)); 
     formData.append('password', String(password)); 
    let init = { 
    method: 'POST', 
    header:{ 
     'Content-Type': 'application/x-www-form-urlencoded' 
    }, 
    body: formData 
} 
    fetch(url, init) 

Il est réussi à Postman, mais a échoué avec fetch renvoyant une erreur 400 sans param. Espérons que certaines aide, grâce

Alors j'ai changé mon code

var details = { 
      'username': '123', 
      'password': '123', 
     }; 
     var formBody = []; 
     for (var property in details) { 
     var encodedKey = encodeURIComponent(property); 
     var encodedValue = encodeURIComponent(details[property]); 
     formBody.push(encodedKey + "=" + encodedValue); 
    } 
     formBody = formBody.join("&"); 

     let init = { 
     method: 'POST', 
     header:{ 
      'Accept': 'application/json', 
      'Content-Type': 'application/x-www-form-urlencoded' 
     }, 
     body: formBody 
    } 
     fetch(url, init) 

Mais obtenir une même erreur

console

le formBody:

username=123&password=123 

Ma clé headers a eu tort, c'était le erreur

doit être:

let init = { 
      method: 'POST', 
      headers:{ 
       'Accept': 'application/json', 
       'Content-Type': 'application/x-www-form-urlencoded' 
      }, 
      body: formBody 
     } 

au lieu de

let init = { 
       method: 'POST', 
       header:{ 
        'Accept': 'application/json', 
        'Content-Type': 'application/x-www-form-urlencoded' 
       }, 
       body: formBody 
      } 
+0

Je trouve que mon type de contenu devient "text/plain; charset = UTF-8" dans la requête.Mais je ne sais toujours pas pourquoi. – Lyle

+0

Mes clés étaient erronées. C'était la faute. – Lyle

Répondre

0

Code d'état 400 signifie que vous avez envoyé une mauvaise demande, à savoir le serveur prévu autre chose.

Dans ce cas, vous envoyez multipart/form-data brut (la première option dans Postman), tandis que vous dites que vous envoyez x-www-form-urlencoded dans vos en-têtes. Comme vous voulez utiliser ce dernier en fonction de votre capture d'écran Postman, vous devez envoyer votre corps au format x-www-form-urlencoded.

+0

Comment puis-je formater mon corps dans x-www-form-urlencoded? – Lyle

+0

Je suis le premier à utiliser JS, désolé pour cela .. – Lyle

+0

Comment envoyer votre corps dans x-www-form-urlencoded est une question différente, mais vous trouverez probablement votre réponse [ici] (https: // stackoverflow .com/a/37562814/3990318) –