GAS中google.script.run调用函数无法同时返回两个值如何解决
问题根因
你代码里有4个问题直接导致返回值异常:
- 函数中连续写两个
return是无效逻辑:JS执行到第一个return就会立刻终止当前函数,后面的return email永远不会被执行 - 变量名写错:你读取表格数据存在
data变量中,循环内取值时错用了不存在的inputData变量,运行时会触发引用错误 google.script.run的成功回调仅支持接收1个返回参数,就算服务端能返回多个值,前端回调的第二个形参永远是undefined- 额外bug:GAS服务端运行环境没有浏览器的
alert方法,catch块里写alert(e)会直接抛出运行错误
修正后代码
服务端GAS代码
把需要返回的多个字段封装为单个对象返回,同时修正变量名、错误处理逻辑:
function phoneSearch(phone){ try { const ss = SpreadsheetApp.getActive(); const sheet = ss.getSheetByName("sheetNameHere"); const data = sheet.getDataRange().getValues(); for (let i = 1; i < data.length; i++) { if (data[i][4] === phone) { // 多字段封装为对象一次性返回 return { name: data[i][3], email: data[i][5] } } } // 无匹配结果时返回空值,避免前端取值报错 return {name: "", email: ""} } catch(e) { // 服务端用console打印错误,不要用alert console.error(e.message) return {name: "", email: ""} } }
前端HTML代码
调整成功回调逻辑,从返回的对象中拆分需要的字段:
<script> function phoneSearch() { const phone = document.getElementById("phone").value; google.script.run.withSuccessHandler(onSuccess).phoneSearch(phone); } function onSuccess(res) { document.getElementById('nameDiv').innerHTML = `<div>${res.name}</div>`; document.getElementById('emailDiv').innerHTML = `<div>${res.email}</div>`; } </script>
内容的提问来源于stack exchange,提问作者Mahmoud
相关产品推荐
相关产品推荐

