第三章 前端发起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的应用程序和需要更多灵活性及额外特性的场景提供了便利。

相关文章
|
22天前
|
JSON Java 数据格式
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
78 25
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
|
4天前
|
JSON JavaScript 前端开发
什么是HTTP POST请求?初学者指南与示范
HTTP POST请求是一种常用的HTTP方法,主要用于向服务器发送数据。通过合理设置请求头和请求主体,可以实现数据的可靠传输。无论是在客户端使用JavaScript,还是在服务器端使用Node.js,理解和掌握POST请求的工作原理和应用场景,对于Web开发至关重要。
87 18
|
3天前
|
JSON 数据格式
.net HTTP请求类封装
`HttpRequestHelper` 是一个用于简化 HTTP 请求的辅助类,支持发送 GET 和 POST 请求。它使用 `HttpClient` 发起请求,并通过 `Newtonsoft.Json` 处理 JSON 数据。示例展示了如何使用该类发送请求并处理响应。注意事项包括:简单的错误处理、需安装 `Newtonsoft.Json` 依赖,以及建议重用 `HttpClient` 实例以优化性能。
47 2
|
21天前
|
Web App开发 大数据 应用服务中间件
什么是 HTTP Range请求(范围请求)
HTTP Range 请求是一种非常有用的 HTTP 功能,允许客户端请求资源的特定部分,从而提高传输效率和用户体验。通过合理使用 Range 请求,可以实现断点续传、视频流播放和按需加载等功能。了解并掌握 HTTP Range 请求的工作原理和应用场景,对开发高效的网络应用至关重要。
61 15
|
25天前
|
数据采集 JSON 测试技术
Grequests,非常 Nice 的 Python 异步 HTTP 请求神器
在Python开发中,处理HTTP请求至关重要。`grequests`库基于`requests`,支持异步请求,通过`gevent`实现并发,提高性能。本文介绍了`grequests`的安装、基本与高级功能,如GET/POST请求、并发控制等,并探讨其在实际项目中的应用。
34 3
|
1月前
|
前端开发 UED 开发者
CSS Sprites和图标字体在网页图标加载优化中的应用。CSS Sprites通过合并多图标减少HTTP请求,提升加载速度
本文探讨了CSS Sprites和图标字体在网页图标加载优化中的应用。CSS Sprites通过合并多图标减少HTTP请求,提升加载速度;图标字体则以字体形式呈现图标,便于调整样式。文章分析了两者的优缺点及应用场景,并提供了应用技巧和注意事项,旨在帮助开发者提升页面性能,改善用户体验。
25 5
|
1月前
|
JSON API 数据格式
Python中获取HTTP请求响应体的详解
本文介绍了如何使用Python的`requests`和`urllib`库发送HTTP请求并处理响应体。`requests`库简化了HTTP请求过程,适合快速开发;`urllib`库则更为底层,适用于性能要求较高的场景。文章详细演示了发送GET请求、处理JSON响应等常见操作。
50 3
|
21天前
|
Web App开发 网络安全 数据安全/隐私保护
Lua中实现HTTP请求的User-Agent自定义
Lua中实现HTTP请求的User-Agent自定义
|
1月前
|
前端开发 JavaScript Java
如何捕获和处理HTTP GET请求的异常
如何捕获和处理HTTP GET请求的异常
|
1月前
|
缓存 安全 前端开发
HTTP 协议的请求方法在实际应用中有哪些注意事项?
【10月更文挑战第29天】HTTP协议的请求方法在实际应用中需要根据具体的业务场景和需求,合理选择和使用,并注意各种方法的特点和限制,以确保网络通信的安全、高效和数据的一致性。