传递UUID至descarga函数触发语法错误,请求技术帮助
解决UUID参数传递导致的SyntaxError错误
问题根源
你在拼接按钮的onclick属性时,未给UUID字符串添加引号。UUID包含短横线-,直接作为参数传入函数会被浏览器解析为无效的JavaScript语法,触发Invalid or unexpected token错误。
生成的错误HTML示例:
<button onclick='descarga(123e4567-e89b-12d3-a456-426614174000)'>Descargar</button>
无引号包裹的UUID被视为非法标识符,导致语法解析失败。
修复方案
方案1:给UUID添加引号(快速修复)
修改拼接按钮的代码,在UUID前后添加转义引号:
tr.append("<td>" + "<button class='btn btn-success btn-sm' onclick='descarga(\"" + id + "\")'>Descargar</button>" + "</td>");
或使用单引号转义写法:
tr.append('<td><button class="btn btn-success btn-sm" onclick="descarga(\'' + id + '\')">Descargar</button></td>');
方案2:使用事件绑定(推荐,更安全易维护)
避免内联onclick,改用jQuery事件绑定彻底规避引号问题:
// 创建按钮元素 const downloadBtn = $('<button class="btn btn-success btn-sm">Descargar</button>'); // 绑定点击事件,直接传入id downloadBtn.click(() => descarga(id)); // 将按钮添加到单元格 tr.append($('<td>').append(downloadBtn));
修改后的核心代码片段
替换listarTkt函数中按钮拼接的部分:
if (dataArray[i].status === 3) { console.log(id); // 事件绑定方式创建按钮 const downloadBtn = $('<button class="btn btn-success btn-sm">Descargar</button>'); downloadBtn.click(() => descarga(id)); tr.append($('<td>').append(downloadBtn)); } else { tr.append("<td></td>"); }
额外优化提示
descarga函数中用response.json()处理PDF响应错误,PDF是二进制数据,应改用response.blob():
fetch(downloadUrl + id + "/content", requestOptions) .then(response => response.blob()) // 替换为blob()解析二进制数据 .then(result => { const url = window.URL.createObjectURL(result); const a = document.createElement('a'); a.href = url; a.download = "ticket.pdf"; a.click(); window.URL.revokeObjectURL(url); }) .catch(error => console.log('error', error));
内容的提问来源于stack exchange,提问作者curlydora
相关产品推荐
相关产品推荐

