前提・実現したいこと
問い合わせフォームに入力されたデータを非同期でGoogle スプレッドシートに送りたいと考えています。
そこでJavascriptのfetchを使い、POSTでデータを送信しGASが実行されスプレッドシートに書き込む処理を
作成しました
しかし処理自体は書き込みに成功し、HTTPのステータスコードも200が返ってきているのに
fetchの処理でCORSのエラーが発生しており、エラーハンドリングされます。
そこでCORSのエラーを解消し、正常処理のステップに進むにはどうすればいいのか
また、ステータスコードが200でもエラーになるのはよくあることなのですか
教えていただきたいです。
発生している問題・エラーメッセージ
Access to fetch at 'GASで作成したAPIのURL' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
該当のソースコード
JavaScript
1ajaxButton.addEventListener('click', function () { 2let name = document.forms.google_form.name.value; 3let hurigana = document.forms.google_form.hurigana.value; 4let email = document.forms.google_form.email.value; 5let msg = document.forms.google_form.msg.value; 6const params = new URLSearchParams(); 7params.set('name', name); 8params.set('hurigana', hurigana); 9params.set('email', email); 10params.set('msg', msg); 11 12const url = "GASで作成したAPIのURL"; 13 14const headers = new Headers({ 15 'Content-Type': 'application/x-www-form-urlencoded', 16}) 17 18const data = { 19 method: 'POST', 20 headers: headers, 21 body: params, 22 mode: "cors" 23} 24 25debugger; 26 27 fetch(url, data) 28 .then(function (response) { 29 if(response.ok) { 30 console.log('正常終了しました'); 31 } 32 }) 33 .catch(function (error) { 34 console.log(error.message); 35 console.log(error.stack); 36 }) 37}); 38
GAS
1 2function doPost(e) { 3 var ss = SpreadsheetApp.openById('シートが存在するURL'); 4 var sheet = ss.getSheetByName("シート1"); 5 6 var name = e.parameter.name; 7 var hurigana = e.parameter.hurigana; 8 var email = e.parameter.email; 9 var msg = e.parameter.msg; 10 11 // データ入力 12 sheet.appendRow([name, hurigana, email, msg]); 13
試したこと
modeをno-cors指定にすると処理は正常に終了するけど空のレスポンスが返ってきて
.thenの処理で中身を確認することができなかった。
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/20 08:45