HTML表格本身不发请求,真正联调的是嵌入的表单、按钮或JS逻辑;textarea内容需手动取值,submit事件必须用event.preventDefault()阻止刷新;FormData需确认name属性和DOM同步,后端接收方式须与前端提交格式严格匹配。

HTML 表格本身不发请求,真正联调的是表格里嵌的表单、按钮或 JS 逻辑;文本域(<textarea></textarea>)内容必须手动取值并传给后端,不能靠浏览器自动提交——这是联调失败最常被忽略的前提。
表单 submit 事件必须显式阻止,否则页面跳转或刷新
表格中放 <form></form> 很常见,但很多人写完 fetch 就忘了 event.preventDefault()。结果是:请求确实发出去了,但页面立刻刷新,前端收不到响应,控制台也看不到错误。
- 监听
submit事件时,第一行必须是event.preventDefault() - 不要用
<button onclick="submitForm()"></button>绕过表单机制,容易漏掉表单校验和语义化优势 - 如果表格里没有
<form></form>,就别指望submit事件能触发——得用click或其他事件手动收集数据
textarea 值需显式读取,不能依赖 FormData 自动捕获
多数人以为把 <textarea name="content"></textarea> 放进 <form></form>,new FormData(form) 就能拿到值。但实际中常出现空字符串,原因有二:一是 name 属性缺失或拼错,二是 DOM 更新滞后(比如用 Vue/React 动态渲染后未同步到原生表单)。
- 保险做法是手动取值:
const content = document.querySelector('textarea[name="content"]').value.trim() - 若坚持用
FormData,提交前加一行console.log([...formData.entries()])确认 key 和 value 是否存在 - 注意换行符:
textarea中的\r\n在不同系统表现不一,后端解析时建议统一用String.replace(/\r\n/g, '\n')规范化
后端接收 textarea 内容时,别混用 @RequestParam 和 @RequestBody
前端若用 FormData 提交,后端必须用 @RequestParam 或 @ModelAttribute 接收;若前端用 JSON.stringify({ content: value }) 发送,则后端必须用 @RequestBody。混用会导致参数为 null,且无报错日志。
生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur
立即学习“前端免费学习笔记(深入)”;
- Spring Boot 中,
@RequestParam String content对应FormData.append('content', value) -
@RequestBody ContentDto dto对应fetch('/api/save', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ content }) }) - 中文乱码?检查
application.properties是否有server.servlet.encoding.force=true,仅配charset=UTF-8不够
表格动态行数据提交前,必须序列化成扁平结构再发
表格里带“添加行”功能时,每行有多个 <input> 和一个 <textarea></textarea>,直接用 FormData 会生成重复 key(如 content 出现多次),后端只能收到最后一个值。
- 推荐做法:遍历所有行,构造数组对象,再转 JSON 发送:
JSON.stringify(rows.map(row => ({ title: row.title.value, desc: row.desc.value }))) - 避免在后端用
@RequestParam List<string> content</string>接收多值——Spring 默认只取第一个 - 如果非要用
FormData,key 必须带索引,如content[0]、content[1],后端再用@RequestParam("content[]") String[] contents接收
表格和文本域联调真正的难点不在语法,而在数据流向是否可追溯:前端发的每个字段,是否能在 Chrome Network 的 Payload 里看到?后端 Controller 入参打印出来是否和前端一致?中间任何一环脱节,都得回退一步确认——不是代码写错了,而是数据没走到该去的地方。


















