例えば
<h2>aaa</h2>
<input type="radio" name="data[aaa]" value="1">
<input type="radio" name="data[aaa]" value="2">
<h2>bbb</h2>
<input type="radio" name="data[bbb]" value="1">
<input type="radio" name="data[bbb]" value="2">
といったフォームがあるとします。
この情報をjQueryなど使わず、プレーンなJavaScriptで書こうとしたときに、簡単そうでなぜか迷ってしまったので、備忘録として。
(axiosはnpmでインストール済みと仮定)
ちなみにjQueryだとserialize()
など使えば簡単にできますね。
const url = 'xxxx/xxxxx';
const elements = document.querySelectorAll("input[name^='data']:checked");
const formData = new FormData();
elements.forEach((element) => {
formData.append(element.name, element.value);
});
const postData = new URLSearchParams(formData);
axios.post(url, postData);
という感じで、FormData()
を使って、append()
していく形で実装するのが一番いいです。
const url = 'xxxx/xxxxx';
const elements = document.querySelectorAll("input[name^='data']:checked");
let postData = {};
elements.forEach((element) => {
postData[element.name] = element.value;
});
axios.post(url, postData);
という感じで書いてしまうと、PHP側には配列構造の形でデータが送信されず、name値が data[aaa]
という形で送られてしまいますので、その後の処理がものすごいやりにくいです。
FormData()
を使って処理しましょう。