推荐用 fetch 发送 post 请求,需设 method 为 'post'、content-type 头,并用 json.stringify() 或 urlsearchparams 处理数据;兼容旧浏览器可用 xmlhttprequest,需手动 open、setrequestheader、send 并监听 onload。

用原生 JavaScript 发送 POST 请求,核心是配置 XMLHttpRequest(或 fetch),设置请求方法、请求头,并正确传递数据。下面分两种主流方式说明,推荐优先用 fetch,但也会给出兼容老浏览器的 XMLHttpRequest 写法。
使用 fetch 发送 POST 请求(现代推荐)
fetch 更简洁、基于 Promise,适合大多数现代项目。关键点:指定 method: 'POST',设置 Content-Type,并把数据转成合适格式(如 JSON 或 URL 编码)。
- 发送 JSON 数据(最常见):
fetch('/api/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
username: 'admin',
password: '123456'
})
})
.then(res => res.json())
.then(data => console.log(data))
.catch(err => console.error('请求失败:', err));- 发送表单数据(
application/x-www-form-urlencoded):
const formData = new URLSearchParams();
formData.append('username', 'admin');
formData.append('password', '123456');
<p>fetch('/api/login', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: formData
});</p>使用 XMLHttpRequest 发送 POST 请求(兼容旧浏览器)
适用于需支持 IE10 及更早版本的场景。注意手动打开连接、设置请求头、调用 send(),并监听 onload 或 onreadystatechange。
- 基本写法(推荐用
onload):
const xhr = new XMLHttpRequest();
xhr.open('POST', '/api/login');
xhr.setRequestHeader('Content-Type', 'application/json');
<p>xhr.onload = function() {
if (xhr.status >= 200 && xhr.status </p><p>xhr.onerror = function() {
console.error('网络错误');
};</p><p>xhr.send(JSON.stringify({
username: 'admin',
password: '123456'
}));</p>- 若需上传文件或二进制数据,可直接传
FormData对象,无需设Content-Type(浏览器会自动设置带 boundary 的 multipart):
const form = document.querySelector('#uploadForm');
const formData = new FormData(form);
<p>xhr.open('POST', '/api/upload');
xhr.onload = () => { /<em> 处理响应 </em>/ };
xhr.send(formData); // 自动处理编码</p>常见注意事项
-
JSON 数据必须用
JSON.stringify():直接传对象会报错 -
服务端要能解析对应格式:比如发 JSON,后端需解析
req.body(Node.js/Express 需配express.json()中间件) -
跨域时注意 CORS:服务端需返回
Access-Control-Allow-Origin等响应头 -
避免中文乱码:确保
Content-Type包含; charset=utf-8(fetch默认 utf-8,一般不用额外加)
要不要用 async/await?
当然可以,让 fetch 更易读:
async function login() {
try {
const res = await fetch('/api/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ username: 'a', password: 'b' })
});
const data = await res.json();
console.log(data);
} catch (err) {
console.error(err);
}
}Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











