为什么Blogger站点自定义HTML表单的POST方法提交时报错405?
Blogger表单提交405错误解决方法
你遇到的405错误绝大多数是Google Apps Script部署配置错误导致的,和Blogger本身的POST限制无关,你代码中已经通过e.preventDefault()阻止了表单默认提交,走的是fetch异步提交逻辑,按以下步骤排查修复即可:
- 检查Google Apps Script的部署权限设置
打开对应的Apps Script项目,点击右上角「部署」-「新建部署」,点击设置小齿轮选择「网页应用」,执行身份选择「我(你的谷歌账号邮箱)」,有权访问的人选择「任何人,甚至匿名用户」,重新部署后复制生成的新脚本地址,替换你代码里的scriptURL变量值,注意每次修改Apps Script配置都要重新部署生成新地址才会生效。 - 给Apps Script添加POST响应和跨域逻辑
你的Apps Script代码必须包含doPost方法,同时要配置CORS请求头避免跨域拦截,参考以下基础模板调整你的Apps Script代码:function doPost(e) { // 配置跨域请求头 const headers = { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'POST, OPTIONS', 'Access-Control-Allow-Headers': 'Content-Type' }; // 处理浏览器预检OPTIONS请求 if (e.parameter === undefined || e.postData === undefined) { return ContentService.createTextOutput(JSON.stringify({status: 'precheck pass'})) .setHeaders(headers) .setMimeType(ContentService.MimeType.JSON); } try { // 替换为你自己的谷歌表格ID,可从表格地址栏获取 const targetSheet = SpreadsheetApp.openById('你的谷歌表格ID').getSheetByName('Sheet1'); // 按你需要的字段顺序组装写入数据 const rowData = [ new Date(), e.parameter.name, e.parameter.msg ]; targetSheet.appendRow(rowData); return ContentService.createTextOutput(JSON.stringify({result: 'success'})) .setHeaders(headers) .setMimeType(ContentService.MimeType.JSON); } catch (err) { return ContentService.createTextOutput(JSON.stringify({result: 'fail', msg: err.toString()})) .setHeaders(headers) .setMimeType(ContentService.MimeType.JSON); } } - 优化前端提交逻辑
你的前端表单不需要写method="post"属性,因为已经阻止了默认提交行为,修改<form name="google-sheet" method="post">为<form name="google-sheet">即可,同时可以优化fetch逻辑避免静默失败:const scriptURL = '替换为重新部署后生成的新Apps Script地址' const form = document.forms['google-sheet'] form.addEventListener('submit', e => { e.preventDefault() fetch(scriptURL, { method: 'POST', body: new FormData(form)}) .then(response => { if (!response.ok) throw new Error('接口响应异常') return response.json() }) .then(res => { alert("提交成功,你的反馈已记录!") form.reset() }) .catch(error => { console.error('提交出错:', error.message) alert('提交失败,请稍后重试') }) }) - 额外注意:确保Apps Script调用的谷歌表格,和部署Apps Script的是同一个谷歌账号,且账号对该表格有编辑权限。
内容的提问来源于stack exchange,提问作者Devs
相关产品推荐
相关产品推荐

