第三章 前端发起HTTP请求

简介: 第三章 前端发起HTTP请求

1. XMLHttpRequest API 回顾与使用案例

XMLHttpRequest (XHR) 是一个较早的、由浏览器提供的API,用于在后台(异步)与服务器交换数据。它允许网页从服务器请求新的数据并在不重新加载整个网页的情况下更新部分网页内容。

// 创建一个新的XMLHttpRequest对象实例
var xhr = new XMLHttpRequest();

// 设置请求方法和URL
xhr.open('GET', 'https://api.example.com/data');

// 设置请求完成后的回调函数
xhr.onload = function() {
  if (xhr.status === 200) { // HTTP状态码为200表示成功
    var data = JSON.parse(xhr.responseText); // 解析返回的数据
    console.log(data);
  } else {
    console.error(xhr.statusText); // 输出错误信息
  }
};

// 发送请求
xhr.send();

// 可以设置请求头和其他选项
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.timeout = 3000; // 设置超时时间(毫秒)

2. Fetch API 的现代应用实践

Fetch API 是对 XMLHttpRequest 的更现代且基于 Promise 的替代方案,提供了一种更简洁的语法结构,并支持更多的高级功能,如更好的错误处理和流式读取响应体。

// 使用Fetch发起GET请求
fetch('https://api.example.com/data')
  .then(response => {
    if (!response.ok) {
      throw new Error("HTTP error " + response.status);
    }
    return response.json(); // 如果响应是JSON格式,则解析
  })
  .then(data => {
    console.log(data);
  })
  .catch(error => {
    console.error('Error:', error);
  });

// 设置请求头并发送POST请求
fetch('https://api.example.com/submit', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    username: 'user1',
    password: 'password123'
  })
})
.then(handleResponse)
.catch(handleError);

function handleResponse(response) {
  // 对响应进行进一步处理
}

function handleError(error) {
  console.error('Error fetching data:', error);
}

3. Axios 库的功能特点与实际应用示例

Axios 是一个流行的JavaScript库,特别适用于基于Node.js的环境以及浏览器端,提供了丰富的功能集和易于使用的API来处理HTTP请求。

// 安装axios(如果在Node.js环境中)
npm install axios

// 在项目中导入axios
import axios from 'axios';

// 使用Axios发起GET请求
axios.get('https://api.example.com/data')
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    console.error(error);
  });

// 发起POST请求并传递数据
axios.post('https://api.example.com/submit', {
  username: 'user1',
  password: 'password123'
}, {
  headers: {
    'Content-Type': 'application/json'
  }
})
.then(response => {
  // 处理成功的POST操作
})
.catch(error => {
  // 处理错误
});

// Axios还支持配置默认值、取消请求、转换请求和响应数据等高级特性

4. 其他常用HTTP客户端库对比分析

  • jQuery.ajax:对于使用jQuery的项目来说,$.ajax() 方法是一个方便的选择,它封装了底层的XMLHttpRequest过程,简化了网络请求的编写,但在现代前端开发中,随着原生Promise和Fetch API的普及,其使用频率有所下降。
  • superagent:这是一个灵活、小型且强大的库,适合Node.js和浏览器环境。它具有简单易用的链式调用API和自动处理跨域请求等功能,同时支持各种HTTP方法和中间件插件。


4.1 jQuery.ajax 的使用与特点

jQuery库中的$.ajax()方法提供了一种简化版的HTTP请求方式,适用于那些仍在使用jQuery或者对兼容性有较高要求的项目。

// 使用jQuery发起GET请求
$.ajax({
  url: 'https://api.example.com/data',
  method: 'GET',
  dataType: 'json', // 指定预期的数据类型(如json、jsonp等)
  success: function(data, textStatus, jqXHR) {
    console.log('Data received:', data);
  },
  error: function(jqXHR, textStatus, errorThrown) {
    console.error('Error occurred:', errorThrown);
  }
});

// 发起POST请求并传递数据
$.ajax({
  url: 'https://api.example.com/submit',
  method: 'POST',
  contentType: 'application/json', // 设置请求头内容类型
  data: JSON.stringify({ username: 'user1', password: 'password123' }),
  success: function(response) {
    // 处理成功的POST操作
  },
  error: function(xhr, status, error) {
    // 处理错误
  }
});

特点:

  • jQuery.ajax提供了简洁且易于理解的API,适合初级开发者快速上手。
  • 兼容性良好,支持多种浏览器和版本。
  • 支持多种数据类型转换,包括JSON、XML、HTML、script、jsonp等。
  • 内置了对跨域资源共享(CORS)的支持,通过jsonp或者xhr2实现。
  • 提供了丰富的配置选项和回调函数,便于进行错误处理和自定义需求。

4.2 superagent 库的功能特性

superagent 是一个强大且灵活的JavaScript HTTP客户端库,支持Node.js和浏览器环境,其API设计旨在方便地发送各种类型的HTTP请求。

// 安装superagent
npm install superagent

// 引入superagent
const request = require('superagent');

// 使用superagent发起GET请求
request
  .get('https://api.example.com/data')
  .then(response => {
    console.log('Data received:', response.body);
  })
  .catch(error => {
    console.error('Error occurred:', error);
  });

// 发起POST请求并传递数据
request
  .post('https://api.example.com/submit')
  .set('Content-Type', 'application/json') // 设置请求头
  .send({ username: 'user1', password: 'password123' }) // 发送请求体数据
  .then(response => {
    // 处理成功的POST操作
  })
  .catch(error => {
    // 处理错误
  });


特点:

  • 简洁直观的链式调用API。
  • 跨平台支持,既可用于Node.js,也可在浏览器端使用。
  • 自动解析响应体为JSON格式。
  • 支持文件上传和其他复杂的HTTP请求场景。
  • 可以通过插件扩展功能,例如支持Promise、进度事件监听等。


5. 总结

  • XMLHttpRequest 较为原始,使用起来相对繁琐,但兼容性极好。
  • Fetch API 更现代化且简洁,但由于早期对错误处理和请求取消的支持不足而受到一些批评,但这些问题后来已在某些浏览器中得到改进。
  • Axios 结合了Promise的优势,提供了一致的接口进行跨平台请求,并补充了一些Fetch API缺失的特性,比如自动转换响应数据类型、拦截器和取消请求的能力。
  • jQuery.ajax 和 superagent 则分别针对依赖jQuery的应用程序和需要更多灵活性及额外特性的场景提供了便利。

相关文章
|
12天前
|
Web App开发 缓存 JavaScript
使用TypeScript创建高效HTTP代理请求
使用TypeScript创建高效HTTP代理请求
|
10天前
|
JavaScript 前端开发 网络协议
前端JS发起的请求能暂停吗?
在讨论前端JS发起的请求是否能暂停时,需要明确两个概念:什么状态可以被认为是“暂停”?以及什么是JS发起的请求?
65 1
前端JS发起的请求能暂停吗?
|
1天前
|
域名解析 存储 缓存
HTTP请求流程概览:浏览器构建请求行含方法、URL和版本;检查缓存;解析IP与端口
【6月更文挑战第23天】 HTTP请求流程概览:浏览器构建请求行含方法、URL和版本;检查缓存;解析IP与端口;TCP连接(HTTP/1.1可能需排队);三次握手;发送请求头与体;服务器处理并返回响应;TCP连接可能关闭或保持;浏览器接收并显示响应,更新缓存。HTTP版本间有差异。
12 5
|
5天前
|
Java 应用服务中间件 API
Tomcat处理一个HTTP请求的执行流程的详细解析
Tomcat处理一个HTTP请求的执行流程的详细解析
15 4
|
9天前
|
JSON 数据格式 Python
Python 的 requests 库是一个强大的 HTTP 客户端库,用于发送各种类型的 HTTP 请求
【6月更文挑战第15天】Python的requests库简化了HTTP请求。安装后,使用`requests.get()`发送GET请求,检查`status_code`为200表示成功。类似地,`requests.post()`用于POST请求,需提供JSON数据和`Content-Type`头。
35 6
|
11天前
|
Python
python做http请求
python做http请求
14 1
|
16天前
|
JSON API 数据格式
Requests库:轻松实现Python中的HTTP请求
Requests是Python的第三方HTTP库,简化了HTTP请求的发送,支持GET、POST等方法。要安装,使用`pip install requests`。Requests以其简洁API和强大功能成为网络编程首选工具,为开发者提供高效稳定的网络交互体验。
28 5
|
5天前
|
安全 搜索推荐
基础入门 HTTP数据包&Postman构造&请求方法&请求头修改&状态码判断
基础入门 HTTP数据包&Postman构造&请求方法&请求头修改&状态码判断
|
7天前
|
前端开发 API 数据库
面试官问:如何防止重复提交请求,99%的前端能说出来!
如何防止接口重复提交是一个常见的系统设计问题,主要目的是确保关键操作的原子性和一致性。以下是简化的摘要: 这些方法可以单独或组合使用,取决于系统规模和业务需求。例如,对于低流量系统,简单的请求唯一ID和数据库唯一索引可能足够;而对于高并发场景,可能需要结合前端禁用和后端分布式锁来提高可靠性。幂等性设计是确保接口安全的一种通用策略,适用于各种场景。
|
17天前
|
API Python
Python HTTP请求库对比,以实战请求豆瓣排行榜为例
对比了Python的几个HTTP请求库,包括`requests`、`http.client`、`aiohttp`、`urllib`、`httpx`、`treq`和`requests-toolbelt`,各有特点和优缺点。选择时应考虑项目需求(如异步支持)、易用性、社区支持、性能和兼容性。示例展示了如何使用`requests`和`aiohttp`库发送豆瓣电影排行榜的GET请求。
13 0