たまにうっかり躓くので備忘録としてまとめ。
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 を使っているときの注意点でした。
ご参考になれば幸いです。