Google Apps Script执行完成但无查询结果问题求助
问题解决建议
你的前端页面调用Google Apps Script接口后仅返回“Script execution completed.”,无查询结果,核心原因是脚本未正确返回JSON格式数据,以下是具体排查和修复步骤:
1. 修正Google Apps Script的返回逻辑
Google Apps Script默认执行完成后会返回“Script execution completed.”文本,必须明确输出JSON格式数据:
- 在脚本的
doGet函数末尾,替换默认返回为:// 假设result是查询到的对象或null return ContentService.createTextOutput(JSON.stringify(result)) .setMimeType(ContentService.MimeType.JSON); - 确保查询逻辑正确:根据传入的
examCode参数筛选表格数据,比如匹配表头为code的列:function doGet(e) { var examCode = e.parameter.examCode; var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1'); // 替换为你的表名 var data = sheet.getDataRange().getValues(); var headers = data[0]; var codeIndex = headers.indexOf('code'); var result = null; // 遍历行查找匹配的code for(var i=1; i<data.length; i++){ if(data[i][codeIndex] === examCode){ result = {}; // 将行数据转为键值对 for(var j=0; j<headers.length; j++){ result[headers[j]] = data[i][j]; } break; } } return ContentService.createTextOutput(JSON.stringify(result)) .setMimeType(ContentService.MimeType.JSON); }
2. 优化前端代码的判断逻辑
原代码中if (data)的判断不够准确,空对象{}会被判定为真值,导致错误显示内容,修改如下:
fetch(url) .then(response => { if (!response.ok) throw new Error('请求失败'); return response.json(); }) .then(data => { var detailsDiv = document.getElementById('details'); detailsDiv.innerHTML = ''; if (data && Object.keys(data).length > 0) { for (var key in data) { detailsDiv.innerHTML += `<strong>${key}:</strong> ${data[key]}<br>`; } } else { detailsDiv.textContent = '未找到该考试代码对应的信息。'; } }) .catch(error => { console.error('Error:', error); document.getElementById('details').textContent = '查询出错,请稍后重试。'; });
3. 检查脚本部署设置
- 重新部署脚本时,将权限设置改为「Anyone, even anonymous」,否则前端匿名请求会被拒绝。
- 确认部署的是最新版本的脚本,避免执行旧代码。
4. 调试方法
- 在Google Apps Script编辑器中,使用
Logger.log(examCode)、Logger.log(result)打印关键数据,运行测试后查看日志(点击「查看」→「日志」)。 - 前端打开浏览器控制台(F12),切换到「Network」标签,查看请求的响应内容,确认返回的是JSON格式数据而非默认文本。
内容的提问来源于stack exchange,提问作者Satsang Pravrutti Amdavad
相关产品推荐
相关产品推荐

