たまにうっかり躓くので備忘録としてまとめ。
JavaScript の axois を使って POST 送信をする際、送信するデータを FormData で管理することがあるかと思います。
サンプルコードは下記のとおりです。
const data = {
  name: '田中太郎',
  age: 30,
};
let formData = new FormData();
Object.keys(data).forEach(key => {
  formData.append(key, data[key]);
});
axios.post('[送信先URL]', formData)
  .then(function (response) {
    // 送信成功時の処理
    console.log(response);
  })
  .catch(function (error) {
    // 送信失敗時の処理
    console.log(error);
  });
で、送るデータが上記のような形式なら何も問題がないのですが、送信するデータに配列が含まれている場合、上記のコードでは動作しません。
そのため、配列データの場合の処理を記述する必要があります。
私はここを頻繁に忘れてエラー発生させてしまうんですよね…!
参考にさせていただいた記事はこちらから。
axoisにFormDataを使ってArrayデータを送信する – Qiita
https://qiita.com/k5690033/items/717f280266dee3e1f741
さて修正方法ですが、上記コードの 7~9行目の処理を下記のように修正します。
Object.keys(data).forEach(key => {
  if (Array.isArray(data[key])) {
    data[key].forEach(value => {
      formData.append(key + '[]', value);
    })
  } else {
    formData.append(key, data[key])
  }
});
2行目で現在のキーのデータが配列かどうかを判定し、配列だったら分割してから formData に代入するようにしています。
何でも、formDataを使うと文字列として値を代入するようなので、こうしないと正しくデータを渡せないとのことでした。
ということで、POST 送信時にエラーが発生して困ったときは、このあたりを確認してみることをおすすめします!
ちなみに私も先程これでエラーになったので、現在修正中です…。
以上、JavaScript の axois で データを POST 送信する際に、FormData を使っているときの注意点でした。
ご参考になれば幸いです。
 
					         
               
                       
                