使用SheetDB API更新Google Sheets单元格失败,按PUT文档实现无效
问题排查与修复方案
你的代码存在几个关键问题导致SheetDB更新无效,以下是修复步骤和修正后的代码:
核心问题分析
- 错误的API端点:你使用了
/search查询接口,这个接口仅用于读取数据,无法执行更新操作。SheetDB的更新必须使用/update端点。 - 错误的响应处理逻辑:当前代码不管API请求是否成功,都会弹出"提交成功"的提示,导致你无法察觉请求失败。
- 冗余的
data包裹层:PATCH请求更新部分字段时,不需要在body外层嵌套data对象,直接传入键值对即可。 - 变量名冲突:原代码中重复使用
height变量赋值,虽然JS允许,但容易引发逻辑混淆。
修正后的代码
function submit(){ var weight = document.getElementById("weight").value; var height = document.getElementById("height").value; var IDnum = document.getElementById("IDnum").value; var heightVal = height / 100; heightVal = heightVal * heightVal; var calc = weight / heightVal; var bmi = calc.toFixed(2); alert(bmi); fetch(`https://sheetdb.io/api/v1/mrdpa17lx93ik/update?id=${IDnum}`,{ method: "PATCH", headers: { 'Accept': 'application/json', 'Content-Type': 'application/json', }, body: JSON.stringify({ "CALCULATED BMI": bmi, "duplication": 1 }) }) .then((response) => { // 检查HTTP响应状态是否正常 if (!response.ok) { throw new Error(`请求失败,状态码:${response.status}`); } return response.json(); }) .then((data) => { console.log("API返回数据:", data); confirm("提交成功"); }) .catch((error) => { console.error("更新失败:", error); alert("数据更新失败,请查看控制台获取详细错误信息"); }); }
额外检查项
- 确认Google Sheets中的列名与请求里的
"CALCULATED BMI"、"duplication"完全一致(SheetDB对列名的大小写、空格敏感)。 - 确认
IDnum对应的值在工作表的id列中存在;如果你的匹配列不是默认的id,需要修改URL中的参数,例如匹配student_id列就写成?student_id=${IDnum}。 - 检查SheetDB后台的API权限,确保该API密钥对应的工作表开启了写入权限。
内容的提问来源于stack exchange,提问作者EZB3lla
相关产品推荐
相关产品推荐

