原生 JS 发送带参数 POST 请求:XMLHttpRequest 与 fetch API 实现及注意事项
在原生 JavaScript 中,可以使用 `XMLHttpRequest` 对象或者 `fetch` API 来发送 POST 请求并携带参数。 使用 XMLHttpRequest 对象 ```javascript // 创建 XMLHttpRequest 对象 const xhr = new XMLHttpRequest(); // 要请求的 URL const url = 'https://example.com/api'; // 要发送的参数 const params = { name: 'John', age: 30 }; // 将参数对象转换为 URL 编码的字符串 const encodedParams = Object.keys(params) .map(key => encodeURIComponent(key) + '=' + encodeURIComponent(params[key])) .join('&'); // 初始化请求,第一个参数指定请求方法为 POST,第二个参数是请求的 URL xhr.open('POST', url, true); // 设置请求头,告诉服务器请求体的格式是 URL 编码的 xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); // 监听请求状态变化事件 xhr.onreadystatechange = function() { // 当请求完成且状态码为 200 时,表示请求成功 if (xhr.readyState === 4 && xhr.status === 200) { console.log(xhr.responseText); } }; // 发送请求,并将参数作为请求体发送 xhr.send(encodedParams); ``` 使用 fetch API ```javascript // 要请求的 URL const url = 'https://example.com/api'; // 要发送的参数 const params = { name: 'John', age: 30 }; // 配置请求选项 const options = { method: 'POST', headers: { 'Content-Type': 'application/json' }, // 将参数对象转换为 JSON 字符串作为请求体 body: JSON.stringify(params) }; // 发送请求 fetch(url, options) .then(response => { // 检查响应状态是否成功 if (!response.ok) { throw new Error('Network response was not ok'); } // 将响应数据解析为 JSON return response.json(); }) .then(data => { console.log(data); }) .catch(error => { console.error('Fetch error:', error); }); ``` 我在以往的开发过程中,碰到过以下几点需要格外小心处理的地方: 1. 注意请求头的设置,不同的服务器可能要求不同的请求头格式,例如 `Content-Type` 的值要根据实际情况设置。 2. 处理请求错误时要考虑全面,网络错误、服务器返回错误状态码等情况都要进行适当的处理。 3. 对于参数的编码处理要正确,避免因为参数编码问题导致请求失败。 ######[AI写代码神器 | 636点数解答 | 2025-08-20 17:27:16]
- 易语言实现高并发 HTTP 操作:多线程、线程池与异步操作实战(字节豆包 | 849点数解答 | 2025-06-03 23:17:33)268
- Vue项目代码优化:职位详情异常处理、简历校验与收藏操作提示升级 (GPT | 136点数解答 | 2024-12-29 17:09:05)241
- Java 创建 HTTP POST 请求实现文件上传:代码示例与注意要点 (字节豆包 | 300点数解答 | 2024-12-06 16:07:20)345
- 易语言模拟POST请求抓包内容:代码示例及注意要点揭秘(字节豆包 | 1131点数解答 | 2025-06-02 12:46:09)192
- PHP代码:循环检测域名状态,借助HTTP请求与CURL实现(GPT | 947点数解答 | 2024-10-27 11:56:50)265
- CSS技巧:鼠标移入a标签自动隐藏指定div(阿里通义 | 181点数解答 | 2023-10-26 09:52:31)403
- PDF.js 动态导入模块失败:原因剖析与解决方案全揭秘(字节豆包 | 573点数解答 | 2025-07-30 16:04:03)139
- 易语言:实现搜索通配符功能,解决搜索内容超255问题(字节豆包 | 32点数解答 | 2026-02-09 16:44:31)51
- 代码优化:“A_寻找通配符”子程序的改进之路(字节豆包 | 1248点数解答 | 2026-02-09 16:45:52)55
- 易语言:A_寻找通配符子程序完整实现及详细代码解读(字节豆包 | 1368点数解答 | 2026-02-09 16:49:12)49
- 手把手教你删除代码里自动暂停视频的功能(附代码示例)(阿里通义 | 590点数解答 | 2024-08-05 13:27:39)260
- Python 实现:从初始 URL 取参构建新链接并截取特定内容(字节豆包 | 262点数解答 | 2024-09-09 04:47:49)264