平时写网页或者做小程序,免不了要跟服务器打交道。比如用户注册、提交订单、上传图片这些操作,背后都是通过 POST 请求把数据发给 API 处理的。GET 请求适合拿数据,而 POST 更适合送数据,尤其是涉及隐私或大量内容的时候。
什么时候该用POST?
当你需要向服务器提交信息时,基本就得靠 POST。比如你在网页填了个表单,点了“提交”,浏览器就会打包你的用户名、密码、邮箱这些内容,用 POST 发出去。和 GET 不同,POST 的数据不会暴露在地址栏里,更安全。
用原生JavaScript发POST请求
最基础的方式是用 fetch,语法清晰,兼容性也不错。下面这个例子模拟用户登录:
fetch('https://api.example.com/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
username: 'jack',
password: '123456'
})
})
.then(response => response.json())
.then(data => console.log(data))
.catch(err => console.error('请求失败:', err));
这段代码往指定地址发了个 JSON 格式的数据包。注意 content-type 要设成 application/json,不然对方可能解析不了。如果接口要求传表单格式,可以把 body 改成 FormData 对象:
const formData = new FormData();
formData.append('username', 'jack');
formData.append('avatar', fileInput.files[0]);
fetch('https://api.example.com/upload', {
method: 'POST',
body: formData
})
.then(res => res.json())
.then(data => console.log(data));
别忘了处理错误
网络不是永远可靠的。用户可能断网,服务器可能崩了,接口也可能改了地址。所以每次发请求,最好都加上 catch 捕获异常。另外,状态码不是 200 的时候也要提醒自己,比如 401 表示没登录,404 是接口找不着,500 就是服务器出问题了。
可以这样判断响应是否正常:
fetch('/api/submit', { method: 'POST', body: data })
.then(res => {
if (!res.ok) {
throw new Error(`HTTP error! status: ${res.status}`);
}
return res.json();
})
.then(data => {
alert('提交成功!');
})
.catch(err => {
console.error('出错了:', err);
alert('提交失败,请检查网络');
});
跨域问题怎么破?
本地调试时经常遇到“CORS”错误,提示不允许跨域请求。这其实是浏览器的安全机制。解决办法有两个方向:一个是后端在响应头加 Access-Control-Allow-Origin,另一个是你在开发时用代理绕过去。比如用 Vite 或 Webpack 的 devServer 配置 proxy,把 /api 开头的请求转到真实接口地址,就能避开这个问题。
举个 Vite 配置的例子:
export default {
server: {
proxy: {
'/api': 'http://localhost:3000'
}
}
}
这样一来,前端请求 /api/login,实际会打到 http://localhost:3000/api/login,就不会触发跨域限制。
小技巧:用浏览器调试POST请求
打开开发者工具,点 Network 标签,再提交一次表单,你就能看到刚发出的 POST 请求。点进去看 Headers,能确认数据是不是正确发送了;看 Payload 可以检查 body 内容;Response 则告诉你服务器回了啥。这对排查“明明填了数据却没反应”特别有用。
有时候接口文档写得含糊,比如说是接收 JSON,结果实际只认表单。这时候靠调试工具一眼就能发现对不上,省下瞎猜的时间。