调用Google Apps Script的cURL转JS后请求200但脚本未执行如何解决?
问题原因与修复方案
核心错误原因
- 请求体JSON格式非法:你手动拼接的JSON字符串中
devMode键未添加双引号,不符合标准JSON语法规范。终端cURL工具对JSON格式容错性较高,可正常解析发送该请求,但Google Script API对浏览器端请求会做严格格式校验,参数解析失败后不会触发对应Apps Script函数,因此会出现HTTP状态码200但功能未执行的情况。 - 缺少执行结果校验逻辑:Google Apps Script API的HTTP状态码200仅代表接口成功接收请求,不代表函数执行成功。执行过程中的权限错误、参数错误等信息都会放在响应体的
error字段中,不会改变HTTP状态码,你之前的代码未做响应解析,无法感知到这类错误。 - 潜在配置问题:如果JSON修正后仍无法正常执行,需确认以下配置:访问令牌拥有Apps Script执行权限、Google Drive读写权限;Web应用域名已在Google Cloud项目的OAuth同意屏幕中登记;Apps Script的部署配置(执行身份、可访问范围)与令牌权限匹配。
修正后的JavaScript代码
const url = "https://script.googleapis.com/v1/scripts/### script ID ###:run"; const xhr = new XMLHttpRequest(); xhr.open("POST", url); xhr.setRequestHeader("Authorization", "Bearer ### access token ###"); xhr.setRequestHeader("Content-Type", "application/json"); xhr.onreadystatechange = function () { if (xhr.readyState === 4) { console.log("状态码:", xhr.status); const res = JSON.parse(xhr.responseText); console.log("完整响应内容:", res); // 捕获接口返回的执行错误 if (res.error) { console.error("函数执行出错:", res.error); return; } if (res.done) { console.log("函数执行成功,返回结果:", res.response.result); } } }; // 用JSON.stringify自动生成标准JSON,避免手动拼写语法错误 const requestBody = JSON.stringify({ "function": "##function name##", "parameters": ["##MainDocID##", ["##Doc1ID##", "##Doc2ID##", "##Doc3ID##"]], "devMode": false }); xhr.send(requestBody);
后续排查建议
- 运行修正后的代码,查看控制台打印的完整响应内容,根据具体错误提示调整参数或权限配置。
- 确认Apps Script部署类型为「API可执行」,且调用时填写的部署版本号正确。
- 确认访问令牌的OAuth权限范围包含
https://www.googleapis.com/auth/script、https://www.googleapis.com/auth/drive等必要权限。
内容的提问来源于stack exchange,提问作者Wardiam
相关产品推荐
相关产品推荐

