向Google脚本发送数据时收到异常数据,求排查(附测试代码)
刚上手Google Apps Script(GAS)确实容易踩这些小坑,结合你给出的局部代码,我整理了几个最可能导致收到奇怪数据的原因,你可以逐一排查:
请求格式与GAS解析逻辑不匹配
GAS的doGet/doPost函数对请求格式有明确要求。如果你的AJAX请求没设置正确的contentType,或者GAS端没对应解析,就会拿到混乱的数据。比如用jQuery发JSON数据时,必须指定contentType: "application/json",并且用JSON.stringify()包裹数据:function A1() { $.ajax({ url: "你的GAS部署URL", method: "POST", contentType: "application/json", data: JSON.stringify({key: "value"}) // 必须序列化数据 }); }对应的GAS端要这样解析:
function doPost(e) { const receivedData = JSON.parse(e.postData.contents); Logger.log(receivedData.key); // 才能拿到正确参数值 return ContentService.createTextOutput("已接收数据"); }如果用默认的
application/x-www-form-urlencoded格式,GAS端用e.parameter.key就能直接获取参数。GAS部署的权限或访问限制
如果你部署脚本时选了「仅限我自己」,但本地页面是直接通过file://协议打开的,浏览器会因为跨域或权限拦截请求,返回的可能是权限错误的HTML内容(看起来就像“奇怪的数据”)。测试阶段可以暂时把部署权限改成「任何人,甚至匿名」,确认数据正常后再调整。跨域请求的浏览器限制
本地直接打开的HTML文件(file://协议)发起跨域请求到GAS服务器,浏览器的CORS策略可能会干扰请求,导致数据传输异常。你可以把HTML放到本地临时服务器(比如用Python命令python -m http.server启动),通过http://localhost访问页面后再测试请求。GAS端的返回格式问题
如果你的GAS函数没有用ContentService或HtmlService返回规范的响应,可能会返回默认的脚本执行信息,看起来也会很奇怪。确保返回的是明确的文本/JSON:return ContentService.createTextOutput(JSON.stringify({status: "success"})) .setMimeType(ContentService.MimeType.JSON);
内容的提问来源于stack exchange,提问作者Chora Poczta

