当前位置: 首页 > web >正文

JavaScript中的Request详解:掌握Fetch API与XMLHttpRequest

目录

一、为什么需要Request?

二、XMLHttpRequest (XHR) 基础

1. 创建请求

2. 处理响应 

3. 关键配置

三、Fetch API(推荐方案)

1. 发起GET请求

2. 发起POST请求 

3. 高级配置项

四、Request对象封装(Fetch进阶)

五、错误处理最佳实践

1. Fetch API错误捕获

2. 超时控制(结合AbortController) 

六、总结与选择建议


一、为什么需要Request?

在Web开发中,前端常需从服务器获取数据(如用户信息、商品列表)或提交数据(如登录表单)。JavaScript通过HTTP请求实现这一过程,核心工具为:

  1. Fetch API(现代标准,基于Promise)

  2. XMLHttpRequest(传统方案,兼容旧浏览器)

 

二、XMLHttpRequest (XHR) 基础
1. 创建请求
const xhr = new XMLHttpRequest();  
xhr.open('GET', 'https://api.example.com/data');  
xhr.send();  

 

2. 处理响应 
xhr.onload = function() {  if (xhr.status >= 200 && xhr.status < 300) {  console.log(JSON.parse(xhr.responseText));  } else {  console.error('请求失败:', xhr.status);  }  
};  

 

3. 关键配置
  • 设置请求头:xhr.setRequestHeader('Content-Type', 'application/json')

  • 指定响应类型:xhr.responseType = 'json'

适用场景:兼容IE等旧浏览器。

 

三、Fetch API(推荐方案)
1. 发起GET请求
fetch('https://api.example.com/data')  .then(response => {  if (!response.ok) throw new Error('网络响应异常');  return response.json(); // 解析JSON数据  })  .then(data => console.log(data))  .catch(error => console.error('请求失败:', error));  

 

2. 发起POST请求 
fetch('https://api.example.com/users', {  method: 'POST',  headers: {  'Content-Type': 'application/json'  },  body: JSON.stringify({ name: 'John', age: 30 })  
});  
3. 高级配置项
参数说明
methodHTTP方法(GET/POST/PUT等)
headers请求头对象(如身份验证Token)
body请求体数据(支持FormData、Blob等)
mode请求模式(如corsno-cors
cache缓存策略(no-storereload

 

四、Request对象封装(Fetch进阶)

可复用配置的Request对象示例:

const request = new Request('https://api.example.com/data', {  method: 'GET',  headers: new Headers({  'Authorization': 'Bearer token123'  })  
});  fetch(request)  .then(response => response.json())  .then(data => console.log(data));  

 

五、错误处理最佳实践
1. Fetch API错误捕获
fetch(url)  .then(response => {  if (!response.ok) {  throw new Error(`HTTP错误 ${response.status}`);  }  return response.json();  })  .catch(error => {  console.error('请求异常:', error);  // 显示用户提示  });  

 

2. 超时控制(结合AbortController) 
const controller = new AbortController();  
const timeoutId = setTimeout(() => controller.abort(), 5000);  fetch(url, { signal: controller.signal })  .then(/* ... */)  .catch(() => console.log('请求超时'))  .finally(() => clearTimeout(timeoutId));  

六、总结与选择建议
特性Fetch APIXMLHttpRequest
语法简洁度✅ Promise链式调用❌ 回调嵌套
流式数据处理✅ 支持ReadableStream❌ 不支持
中断请求✅ AbortController✅ xhr.abort()
浏览器兼容性❌ 不兼容IE✅ 全浏览器兼容

推荐策略

  • 现代项目首选 Fetch API

  • 需兼容IE时降级为 XMLHttpRequest

  • 复杂场景使用库(如Axios)封装

 

http://www.xdnf.cn/news/15020.html

相关文章:

  • 微前端框架对比
  • unity 模型UV重叠问题相关(重新整理)
  • web网页,在线%发布,智能投稿,新闻系统%分析系统demo,基于aspnet,net,mvc,echart,sqlserver数据库
  • Spring Boot项目中整合MCP协议及实现AI应用实践
  • 领域驱动设计(DDD)重塑金融系统架构
  • [论文阅读] 人工智能 | 读懂Meta-Fair:让LLM摆脱偏见的自动化测试新方法
  • Qt中的QProcess类
  • 计算阶梯电费
  • CSS知识复习4
  • 安卓10.0系统修改定制化_____安卓9与安卓10系统文件差异 有关定制选项修改差异
  • 瑞斯拜考研词汇课笔记
  • 华为OD机试 2025B卷 - 最长的指定瑕疵度的元音子串 (C++PythonJAVAJSC语言)
  • 指尖上的魔法:优雅高效的Linux命令手册
  • 微软重磅开源Magentic-UI!
  • 在bash shell 函数传递数组的问题2
  • mysql5.7系列-InnoDB的MVCC实现原理
  • 各服务器厂商调整BIOS睿频教程
  • 【Vben3全解】【组件库开发】解决组件库开发中css的命名难题,保证代码质量,构建useNamespace函数
  • Day08-Flask 或 Django 简介:构建 Web 应用程序
  • 量子计算+AI芯片:光子计算如何重构神经网络硬件生态
  • Malformed \uxxxx encoding.
  • Java设计模式之行为型模式(策略模式)介绍与说明
  • Podman与Docker详细比较:从原理到使用
  • 0704-0706上海,又聚上了
  • 字符函数和字符串函数(下)- 暴力匹配算法
  • 改变this指向的方法
  • 前端环境nvm/pnpm下载配置
  • Modbus TCP 通信多请求处理
  • c++对象池
  • .golangci.yml文件配置