← jQuery parent()方法:精准获取直接父元素 jQuery ready()方法:在DOM就绪后安全执行代码 →

jQuery post()方法:通过HTTP POST请求发送数据到服务器

原创 2026-05-01 jQuery 已有人查阅

在前后端数据交互中,$.post() 是 jQuery 发起 HTTP POST 请求的核心方法之一。与 GET 请求将参数拼接在 URL 后面不同,POST 请求将数据放在请求体中发送,更适合处理表单提交、登录验证、数据写入等涉及敏感信息或大批量数据的场景。

$.post() 本质上是对 $.ajax() 的封装,预设了 type: "POST"。jQuery 把最常用的配置项简化成几个平铺参数,在不需要精细控制请求头、超时时间等高级选项时,用 $.post() 比写完整的 $.ajax() 配置对象更省事。

为什么在提交表单或发送敏感数据时应该用 .post()而不是.post()而不是.get()?

三个核心原因。第一,POST 请求的请求体不暴露在 URL 中,用户不会在浏览器地址栏看到密码或个人信息。第二,POST 请求不会被浏览器缓存,每次都是全新请求,避免了敏感数据在缓存中残留的风险。第三,GET 请求的 URL 长度受限于浏览器和服务器配置(通常约 2000 字符),POST 请求体理论上没有长度硬性限制,适合发送较大的 JSON 数据或文件内容。

语法

$.post(URL, data, function(data, status, xhr), dataType)

参数说明:

  • URL(必需):请求发送的目标地址。这是四个参数中唯一不可省略的。

  • data(可选):随请求发送的数据,可以是普通对象或字符串。对象会被自动序列化为 URL 编码格式(application/x-www-form-urlencoded)后放入请求体。

  • function(data, status, xhr)(可选):请求成功时执行的回调函数。它接收三个参数:

    • data:服务器返回的响应体数据。

    • status:请求状态文本,如 "success""error" 等。

    • xhr:底层 XMLHttpRequest 对象,便于需要时访问响应头等原始信息。

  • dataType(可选):预期服务器返回的数据类型。可选值为 "text""json""jsonp""html""script" 和 "xml"。如果不指定,jQuery 会根据响应头自动推断。

课程知识要点

  • 请求体传输:POST 数据放在请求体中而非 URL 查询字符串里,适合传递密码、令牌等敏感信息。

  • 不会被缓存:浏览器不会缓存 POST 请求的响应,每次点击或提交都是全新的请求,不存在使用陈旧数据的隐患。

  • 数据自动序列化:传入对象时,jQuery 会自动将其转为 application/x-www-form-urlencoded 格式。如需发送 JSON,需手动调用 JSON.stringify() 并设置 contentType(此时建议改用 $.ajax())。

  • 回调只在成功时触发$.post() 的成功回调仅在服务器返回 2xx 状态码时执行。需要处理错误可以链式调用 .fail() 或改用 $.ajax()

  • 返回 jqXHR 对象:和 $.get() 一样,$.post() 返回 jqXHR 对象,支持 .done().fail() 和 .always() 的链式写法。

示例:模拟表单提交并显示服务器响应

下面的例子演示了用 $.post() 向服务器发送用户输入的姓名和邮箱,并将返回的 HTML 内容展示在页面上。假设服务器上存在一个 welcome.html 文件作为响应资源。

服务器响应文件 welcome.html:

<h1>提交成功</h1>
<h2>欢迎加入编程学习社区!</h2>
<p>我们已将课程资料发送到你的邮箱 alan@ebingou.cn</p>

发送 POST 请求的主页面:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>post() 方法示例 · 编程学习</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <style>
        body {
            font-family: sans-serif;
            margin: 30px;
        }
        form div {
            margin-bottom: 12px;
        }
        label {
            display: inline-block;
            width: 70px;
        }
        #response-box {
            margin-top: 20px;
            padding: 15px;
            border: 1px solid #ccc;
            background-color: #f9f9f9;
        }
    </style>
</head>
<body>
    <h3>jQuery post() 方法——提交用户信息</h3>
    <p>填写以下表单,点击提交发送 POST 请求:</p>
    <form id="user-form">
        <div>
            <label>姓名:</label>
            <input type="text" name="username" id="username" placeholder="请输入姓名">
        </div>
        <div>
            <label>邮箱:</label>
            <input type="email" name="email" id="email" placeholder="请输入邮箱">
        </div>
        <button type="submit">提交信息</button>
    </form>

    <div id="response-box">
        <p id="response-content"></p>
        <p id="response-status"></p>
    </div>

    <script>
        $(document).ready(function () {
            $("#user-form").submit(function (e) {
                // 阻止表单的默认提交行为
                e.preventDefault();

                // 收集要发送的数据
                var formData = {
                    username: $("#username").val(),
                    email: $("#email").val()
                };

                // 发起 POST 请求
                $.post("welcome.html", formData, function (data, status) {
                    // 显示服务器返回的内容
                    $("#response-content").html(data);
                    // 显示请求状态
                    $("#response-status").text("请求状态: " + status).css("color", "green");
                }).fail(function (xhr, status, error) {
                    // 处理请求失败的情况
                    $("#response-status").text("请求失败: " + status + " - " + error).css("color", "red");
                });
            });
        });
    </script>
</body>
</html>

在表单中输入姓名和邮箱后点击提交,数据通过 POST 请求发送给服务器,页面下方会显示服务器返回的欢迎信息和请求成功状态。如果请求失败(如网络中断或服务器返回错误),会触发 .fail() 中的错误处理提示。

在项目中,$.post() 的使用频率很高,但有几点细节值得注意。

第一,始终为 POST 请求绑定错误处理$.post() 和 $.get() 一样,成功回调只在服务器返回 2xx 时触发。网络超时、500 错误等都不会自动提示用户。我习惯在每次 $.post() 后链式调用 .fail(),即使只是向用户显示一条简单的错误提示也比静默失败好。

第二,如果服务器接口接收 JSON 格式数据,用 $.post() 就不太合适了。它默认以 application/x-www-form-urlencoded 格式发送数据,你得手动转换并设置请求头。这种场景下直接改用 $.ajax() 配置 contentType: "application/json" 并传入 JSON.stringify() 处理的数据会更直接,也让请求的意图更明确。

第三,POST 请求不能通过浏览器地址栏直接访问或加入书签。这个特性在设计后台管理、表单提交等功能时是合理的保护机制,但如果你需要做一个可以分享链接的搜索结果页,POST 就不适用了,GET 请求配合查询字符串反而更合适。

之后提一下 data 参数。如果表单字段不多,直接在 $.post() 的 data 里写对象字面量很方便。如果表单有十几个字段,建议用 $("#form").serialize() 一次性收集所有字段,它会自动生成 URL 编码字符串,避免手动拼对象的重复劳动。

← jQuery parent()方法:精准获取直接父元素 jQuery ready()方法:在DOM就绪后安全执行代码 →
分享笔记 (共有 篇笔记)
验证码:
微信公众号