在 Web 开发中,GET 和 POST 是最基础的两种请求方式。GET 主要用于从服务器获取数据,而 POST 则用于提交需要保存的数据。
GET 请求与参数编码
GET 请求通常需要在 URL 后附加查询字符串。使用 XMLHttpRequest(XHR)发送请求时,必须确保这些参数经过正确编码,否则特殊字符可能导致请求失败。
常见的错误在于参数格式不规范。每个键值对都需要用 encodeURIComponent() 处理,并用 & 连接。例如:
xhr.open("get", "example.php?name1=value1&name2=value2", true);
为了简化操作,可以封装一个辅助函数来动态拼接 URL:
function addURLParam(url, name, value) {
url += (url.indexOf("?") == -1 ? "?" : "&");
url += encodeURIComponent(name) + "=" + encodeURIComponent(value);
return url;
}
这个函数会先检查 URL 是否已有参数,决定追加 ? 还是 &,然后对参数名和值进行编码并返回新 URL。实际使用时:
let url = "example.php";
url = addURLParam(url, "name", "Nicholas");
url = addURLParam(url, "book", "Professional JavaScript");
xhr.open("get", url, false);
这样能确保生成的 URL 格式始终符合规范。
POST 请求与数据提交
POST 请求的核心在于请求体(Request Body)。与 GET 不同,POST 可以将大量数据放在请求体中传输,且支持任意格式。
初始化 POST 请求时,将 open() 的第一个参数设为 post:
xhr.open("post", "example.php", true);
接下来通过 方法传入数据。虽然 XHR 最初设计用于 XML,但现在我们更多传递字符串或序列化后的对象。

