原生 JS 发送 HTTP 请求:XMLHttpRequest 与 Fetch API 全解析及注意事项
在原生 JavaScript 中,可以使用 XMLHttpRequest 对象或者更现代的 Fetch API 来发送 HTTP 请求。 使用 XMLHttpRequest 对象 ```javascript // 创建一个 XMLHttpRequest 对象 const xhr = new XMLHttpRequest(); // 初始化一个请求,第一个参数是请求方法,第二个参数是请求的 URL xhr.open('GET', 'https://jsonplaceholder.typicode.com/posts/1'); // 监听请求状态的变化 xhr.onreadystatechange = function() { // 当请求完成且状态码为 200 时,表示请求成功 if (xhr.readyState === 4 && xhr.status === 200) { // 解析响应的 JSON 数据 const response = JSON.parse(xhr.responseText); console.log(response); } }; // 发送请求 xhr.send(); ``` 使用 Fetch API ```javascript // 发送一个 GET 请求 fetch('https://jsonplaceholder.typicode.com/posts/1') // 将响应转换为 JSON 格式 .then(response => response.json()) // 处理 JSON 数据 .then(data => console.log(data)) // 处理请求过程中可能出现的错误 .catch(error => console.error('Error:', error)); ``` 我在以往的开发过程中,碰到过以下几点需要格外小心处理的地方: 1. 跨域问题:当请求的 URL 与当前页面的域名不可能会遇到跨域问题,需要服务器端进行相应的配置来允许跨域请求。 2. 错误处理:无论是使用 XMLHttpRequest 还是 Fetch API,都要确保对可能出现的错误进行处理,避免程序崩溃。 3. 兼容性:Fetch API 是比较新的 API,在一些旧版本的浏览器中可能不支持,需要考虑使用 polyfill 来保证兼容性。 ######[AI写代码神器 | 419点数解答 | 2025-08-20 17:25:29]
- 易语言实现高并发 HTTP 操作:多线程、线程池与异步操作实战(字节豆包 | 849点数解答 | 2025-06-03 23:17:33)268
- PHP代码:循环检测域名状态,借助HTTP请求与CURL实现(GPT | 947点数解答 | 2024-10-27 11:56:50)265
- Vue项目代码优化:职位详情异常处理、简历校验与收藏操作提示升级 (GPT | 136点数解答 | 2024-12-29 17:09:05)241
- 易语言模拟POST请求抓包内容:代码示例及注意要点揭秘(字节豆包 | 1131点数解答 | 2025-06-02 12:46:09)192
- CSS技巧:鼠标移入a标签自动隐藏指定div(阿里通义 | 181点数解答 | 2023-10-26 09:52:31)403
- PDF.js 动态导入模块失败:原因剖析与解决方案全揭秘(字节豆包 | 573点数解答 | 2025-07-30 16:04:03)139
- Python实现深度优先爬虫:精准爬取百度域名下链接,模拟输出详细信息(GPT | 2142点数解答 | 2025-05-13 15:54:49)298
- Python 实现:计算 n! 不同因子个数,附代码详解与复杂度分析(字节豆包 | 731点数解答 | 2026-01-12 12:15:34)110
- 深入探究:n 位格雷码中编号 k 二进制串的求解算法与实现(DeepSeek | 726点数解答 | 2026-01-13 12:31:37)58
- "Debugging 'Cannot Read Properties of Null (reading \'userid\')' Error in Vue Components: Steps and Example"(讯飞星火 | 614点数解答 | 2024-11-28 14:31:57)281
- HTML+jQuery 实现列表元素悬停动画效果:代码详解与注意事项(字节豆包 | 475点数解答 | 2024-12-19 14:58:05)379
- HTML+jQuery:打造动态导航栏动画效果及注意事项(字节豆包 | 495点数解答 | 2024-12-19 14:58:06)327