Web前端技术 · 第4课15 / 21 | 编码:L04-13a
使用HTML创建表单

HTTP请求方法与HTML表单提交

action 指定交到哪里,method 指定提交方式。HTTP 方法不止 GET、POST,但不能全部直接写进 form 的 method。

1. HTML 表单的 method 可以写什么?

get

查询、搜索;表单字段放入 URL 查询部分。省略 method 时默认使用 get。

post

提交需要处理的数据,例如报名;表单字段放入请求体。服务器仍需提供处理程序。

dialog:关闭对话框

dialog 意为“对话框”。method="dialog" 不是把数据交给服务器,而是让对话框内的表单在提交时关闭所属对话框。

dialog 到底是什么?展开说明与演示

<dialog> 是 HTML 的对话框元素,可显示一块临时弹出的内容;method="dialog" 则是其内部 form 的特殊提交方式。两者不是同一件事。

例如,点击“查看报名说明”打开弹窗,读完后点击“我知道了”关闭。这个操作只是确认已读,不需要向服务器发送表单数据,也不代表报名成功。

<button type="button"
  onclick="document.getElementById('notice').showModal()">
  查看报名说明
</button>

<dialog id="notice">
  <form method="dialog">
    <p>请按所选场次参加黄梅戏体验活动。</p>
    <button type="submit" value="read">我知道了</button>
  </form>
</dialog>
  1. showModal() 打开对话框,并暂时阻止操作同一文档中对话框以外的内容。
  2. “我知道了”是 submit 按钮;因为所属 form 使用 method="dialog",提交时关闭对话框,不发送 GET 或 POST 请求,action 在此模式下不起作用。
  3. 按钮的 value="read" 会成为对话框的 returnValue,供脚本判断关闭时选择了什么;不是发送给服务器的字段。

这里的 form 必须放在 dialog 内。若表单含 required 等约束,普通提交仍需通过校验才能关闭。

打开 → 阅读 → 关闭

2. GET 与 POST:本课重点

比较 GET POST
常见用途 查询、筛选等读取操作 报名、创建记录等提交操作
典型字段位置 URL的查询部分,例如 ?session=morning 请求体中
敏感信息 不应放入URL,可能被历史、日志等记录 不等于加密;仍需HTTPS及服务端保护
<form action="/signup" method="post">
  <input name="session" value="morning" type="hidden">
  <button type="submit">报名</button>
</form>

hidden是隐藏控件,不是保密控件。静态课件没有/signup处理程序;演示不发送真实报名。文件上传通常还要设置 enctype="multipart/form-data",本次不要求上传文件。

3. 其他常见 HTTP 请求方法

方法表达操作意图;具体行为由服务器接口实现
方法含义场景示例
GET获取资源查询活动或报名记录。
POST提交数据供服务器处理提交一条报名申请,不仅限于创建记录。
PUT按请求内容创建或整体替换指定资源向指定记录地址提交完整的新内容。
PATCH对资源作部分修改只修改报名记录中的场次。
DELETE请求删除指定资源请求删除一条报名记录;仍需权限检查。
HEAD类似 GET,但响应不包含正文获取文件类型、大小等响应头信息。
OPTIONS询问通信选项浏览器的跨域预检可能使用它。
CONNECT建立到目标的隧道代理连接场景,普通表单不使用。
TRACE请求回显接收到的请求,用于诊断网络诊断场景,普通表单不使用。

不要写 <form method="delete"> 来删除记录:它不是合法的原生表单 method 值,浏览器会按默认 get 处理。PUT、PATCH、DELETE 等通常由 JavaScript 的 fetch 等请求方式配合服务器接口使用;不是写出方法名就能完成操作。

参考:MDN · HTTP 请求方法
https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Methods

表单属性:MDN · form 的 method
https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/form#method