Google Apps Script中withSuccessHandler()未按预期运行问题
问题原因
你获取输入框取值的时机错误。
你在页面初始化阶段就直接读取了fn、ln输入框的value,此时用户还没有填写任何内容,这两个变量的值始终是空字符串。你点击搜索按钮时传给服务端searchDb的参数是空值,自然匹配不到表格中的数据,服务端最终走到隐式return的分支,返回的undefined被google.script.run序列化后传到前端就变成了null,和你看到的现象一致。
修复方案
把输入框取值的逻辑挪到搜索按钮的点击回调里,每次点击时再读取当前输入的内容即可,修改后的前端脚本部分如下:
<script> const search = document.getElementById('search'); const found = document.getElementById('found'); const setClient = document.getElementById('setClient'); let clientId; // 数据库中的客户ID let data; search.addEventListener("click", () => { // 点击时再读取当前输入框内容 const fn = document.getElementById('fn').value; const ln = document.getElementById('ln').value; google.script.run.withSuccessHandler(addClient).searchDb(fn, ln); }); function addClient(data) { alert(data); if (!data) throw "未找到匹配数据"; found.value = `${data.clientFn}, ${data.clientLn}`; clientId = data.clientId; } setClient.addEventListener("click", ()=>{ const fn = document.getElementById('fn').value; const ln = document.getElementById('ln').value; google.script.run.setClient(fn, ln, clientId); }) </script>
补充排查建议
- 可以为
google.script.run添加失败回调捕获服务端报错,避免表格权限、ID错误这类问题被忽略:google.script.run .withSuccessHandler(addClient) .withFailureHandler(err => alert(`服务端报错:${err}`)) .searchDb(fn, ln); - 服务端
searchDb的最后建议显式返回null,不要用隐式的return,减少序列化阶段的不可预期问题。
内容的提问来源于stack exchange,提问作者user5544366
相关产品推荐
相关产品推荐

