这让我发疯了,代码在昨天工作了,但是现在不行了。我试图再次检查所有语法,但是问题仍然存在。 google表格中的此服务器端请求,在服务器端(Logger.log()
)上显示了值,但在客户端返回了null!您能帮我找到问题吗!
function supervisorLine(lineData){
if (lineData== 'Name Value is not VALID!' ) {
console.log("Supervisor Name Issue!");
} else {
document.getElementById('Team').value= lineData[7];
document.getElementById('Shift').value= lineData[12];
document.getElementById('action').classList.remove("disabled");
console.log("team "+lineData[7]+" shift "+lineData[12]);
////////////////////////////////// need to be Moved somewhere after password check !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
google.script.run.withSuccessHandler(function(quickStat2){console.log(quickStat2)}).loginRecords(lineData[7],lineData[12]);
}
}
这也是我的服务器端代码。
function loginRecords(team,shift){
var sh = ss.getSheetByName("Attn Rec");
var result= [];
var matchRec= sh.getRange("a2:l"+sh.getLastRow()).getValues().filter(function(a){
return a[1]===shift && a[4].valueOf()==team.valueOf()});
uniqeLogin = removeDups(matchRec.map(function (a){return a[9]}));
// Logger.log(uniqeLogin);
uniqeLogin.forEach(function (a){
var ary=[team,0 ,shift,"",0,0,0,0,0];
matchRec.forEach(function (r){
if(r[9]===a) {
ary[1]= new Date(r[0]);
ary[3]= r[8];
switch (r[3].toString().toLowerCase()) {
case "off-site work":
case "hr action":
ary[8]++;
break;
case "present":
case "late transfer":
case "transfer":
ary[4]++;
break;
case "no show":
ary[5]++;
break;
case "Sick":
case "vacation":
ary[7]++;
break;
case "late":
case "approved delay start":
ary[6]++;
break;
}
}
});
result.push(ary);
});
Logger.log(result);
return result;
}
回顾一下,Logger.log(result)
返回我需要的数组,但是console.log(quickStat2)
返回null!
先谢谢了。
M
答案 0 :(得分:1)
前一段时间,我碰到了这个问题,这也几乎使我发疯(哦,宽松的JS的乐趣!)。问题在于您正试图将不可接受的类型数据返回给客户端。通过google.script.run
调用的函数对其返回值有限制(例如,应避免使用Date
实例)。
受限类型
当前,您无法返回(请查看documentation,了解有关限制的详细说明):
Date
实例; Function
; DOM
元素(虽然允许使用form
)解决方案
将ary[1]= new Date(r[0]);
更改为ary[1] = r[0];
应该可以解决问题,只需将Date
解析移动到客户端即可。