action必须写成以/开头的绝对路径或完整url;相对路径易因页面url拼接错位导致404,留空则提交至带query和hash的当前url,formaction可覆盖action实现多地址提交。

action 必须写成以 / 开头的绝对路径,或完整协议+域名的 URL;写错、留空、用相对路径,基本等于没写。
action 写成相对路径为什么总 404
相对路径(如 action="api/login" 或 action="../submit")依赖当前页面 URL 拼接,极易错位。比如你在 /admin/user/edit?id=123 页面提交,浏览器实际发出的请求是 /admin/user/api/login,而后端监听的是 /api/login —— 路由对不上,直接 404。
- 绝对路径才是可预测的:
action="/api/login"总指向https://yoursite.com/api/login - 跨域必须写全:
action="https://api.example.com/v1/auth",且后端要配 CORS - 别加后缀:
.php、.jsp是旧习惯,现代框架路由无后缀,action必须和后端 endpoint 完全一致 - 本地开发时,
action="http://localhost:8080/login"比硬写/login更直观,但上线前得换回绝对路径(避免跨域或代理失效)
不写 action 或写成 action="" 会发生什么
浏览器会把表单数据原样提交到当前完整 URL(含 query string 和 hash),比如 https://site.com/form.html?step=2#section1 点提交,就发往这个地址。后端几乎不会监听这种动态 URL,结果通常是 404、白屏或刷新——不是没发,是发错了地方。
-
action=""和不写action效果一样,都触发默认行为 -
action="./"或action="."在部分浏览器里解析异常,不推荐 - 在 Vue Router / React Router 的 history 模式下留空,还可能被前端路由拦截,导致请求根本没发出去
- 双击打开 HTML 文件(
file://协议)时,所有action都失效,必须起本地 server
怎么用 formaction 实现一个表单多个提交地址
formaction 是 <button type="submit"></button> 或 <input type="submit"> 的原生属性,优先级高于 <form></form> 的 action,点哪个按钮就发到哪,不用 JS。
- 必须配合
type="submit",type="button"不生效 - 示例:
<button type="submit" formaction="/save">存草稿</button>和<button type="submit" formaction="/publish">立即发布</button> - 可单独控制 method:
formmethod="POST"或formmethod="GET",覆盖表单默认值 - 支持
formtarget="_blank"(导出类操作)、formenctype="multipart/form-data"(仅该按钮传文件)
最容易被忽略的是:所有提交字段必须带 name 属性,否则浏览器压根不打包发送;action 对了,name 缺了,后端照样收不到任何数据。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











