You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 20:15:02