You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用fetch发送canvas的Data URI至Google Sheets报错修复方法

问题根因

你遇到的报错和data_sent本身的定义无关,是代码逻辑存在3个核心问题导致的:

  • 给id为save的按钮重复绑定了2次onclick事件,后一次绑定直接覆盖前一次,且绑定写法错误:post_trigger(image, uuid)是页面加载时就立即执行函数,不是把函数设为点击回调,这时候点击事件根本不会触发你写的取图片base64的逻辑。
  • 传入post_trigger的参数image是saveAsImg函数内部的局部变量,全局作用域访问不到,且你本来需要传的是canvas转出来的base64数据(也就是image_data),不是未定义的全局image。
  • 附带逻辑问题:fetch的请求地址没加HTTP协议,会被识别为相对路径;空画布场景下弹完提示仍然会返回空的canvas地址,会提交无效数据。
修复方案

把点击事件逻辑合并,点击时先取canvas生成的base64,校验非空后再发请求,修正代码如下:

// 画布转base64方法
this.saveAsImg = function() {
    const imageSrc = this.canvas.toDataURL("image/png");
    if (imageSrc === this.emptyCanvas) {
        alert('請先書寫')
        return null; // 空画布直接返回null,拦截后续提交
    }
    console.log('提交的內容===>', imageSrc)
    return imageSrc;
};

// 提交请求方法
function post_trigger(image_data, uuid) {
    // 补全请求地址协议,按你实际后端服务修改http/https
    let url = 'http://localhost:5050';
    let data_sent = image_data;
    fetch(url, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify({
            email: data_sent
            //deviceID: uuid
        })
    }).then((response) => {
        return response.json();
    }).then((jsonData) => {
        console.log(jsonData);
    }).catch((err) => {
        console.log('錯誤:', err);
    })
}

// 只绑定一次点击事件,点击时按顺序执行取值、校验、提交逻辑
document.getElementById('save').onclick = function() {
    // 先获取canvas转好的base64
    const image_data = writeCanvas.saveAsImg();
    // 空内容直接拦截,不发请求
    if (!image_data) return;
    // 替换为你实际业务里的uuid变量
    const uuid = '';
    // 拿到有效数据后再调用提交方法
    post_trigger(image_data, uuid);
};
关键改动说明
  • 删除重复的onclick绑定,把「生成base64」「校验内容」「发请求」的逻辑合并到同一个点击回调里,保证执行顺序正确。
  • 修正事件绑定写法:不再在绑定时直接执行post_trigger,而是点击触发后先拿到有效image_data再传参调用,从根源避免参数未定义的问题。
  • 空画布场景返回null做拦截,避免提交无效数据。
  • 补全fetch请求的地址协议,避免请求路径解析错误。

内容的提问来源于stack exchange,提问作者Jayco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 08:24:11