1. ホーム
  2. javascript

[解決済み] Fetchを使ってx-www-form-urlencodedのリクエストをPOSTするにはどうしたらいいですか?

2022-04-23 22:34:47

質問

サーバーにフォームエンコードでPOSTしたいパラメータがあります。

{
    'userName': '[email protected]',
    'password': 'Password!',
    'grant_type': 'password'
}

私は、次のようにリクエストを送信しています(現在はパラメータなし)。

var obj = {
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
  },
};
fetch('https://example.com/login', obj)
  .then(function(res) {
    // Do stuff with result
  }); 

フォームエンコードされたパラメータをリクエストに含めるにはどうすればよいですか?

どのように解決するのですか?

x-www-form-urlencodedのペイロードは、以下のように自分で組み立てる必要があります。

var details = {
    'userName': '[email protected]',
    'password': 'Password!',
    'grant_type': 'password'
};

var formBody = [];
for (var property in details) {
  var encodedKey = encodeURIComponent(property);
  var encodedValue = encodeURIComponent(details[property]);
  formBody.push(encodedKey + "=" + encodedValue);
}
formBody = formBody.join("&");

fetch('https://example.com/login', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
  },
  body: formBody
})

なお もし を使用していた場合 fetch を(十分にモダンな)ブラウザで使用する場合、React Nativeではなく、代わりに URLSearchParams オブジェクトを作成し、それをボディとして使用します。 標準的な状態を取得する というのは bodyURLSearchParams オブジェクトとしてシリアライズする必要があります。 application/x-www-form-urlencoded . しかし、React Nativeでは、React Nativeの は実装されていません。 URLSearchParams .