JavaScript进阶 - AJAX请求与Fetch API

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 【7月更文挑战第3天】前端开发中的异步基石:AJAX与Fetch。AJAX,使用XMLHttpRequest,处理跨域、回调地狱和错误处理。Fetch,基于Promise,简化请求,但需注意默认无跨域头和HTTP错误处理。两者各有优劣,理解其问题与解决策略,能提升前端应用的性能和用户体验。

在前端开发的世界里,异步请求是构建交互式网页应用的基石。AJAX(Asynchronous JavaScript and XML)和Fetch API是两种常用的发起异步HTTP请求的技术。本文将深入浅出地介绍这两种技术,探讨它们的常见问题、易错点以及如何避免这些问题,并通过代码示例来加深理解。

AJAX:老牌异步请求技术

AJAX技术自2005年提出以来,一直是前端异步通信的主流方式之一。它通过XMLHttpRequest对象来实现客户端与服务器之间的数据交换,而无需刷新整个页面。

常见问题

  • 跨域请求限制:由于浏览器的同源策略,AJAX请求默认不允许跨域。
  • 回调地狱:在处理多个嵌套的AJAX请求时,可能会遇到代码可读性差的问题。
  • 错误处理不一致:传统的AJAX请求在错误处理方面不够统一,有时很难区分是网络错误还是服务器返回的错误。

避免方法

  • 使用CORS:为了解决跨域问题,可以使用CORS(Cross-Origin Resource Sharing)策略,但这需要服务器端的支持。
  • Promise化:将AJAX请求Promise化,使用.then().catch()来处理响应和错误,提高代码的可读性。
  • 统一的错误处理:始终检查statusstatusText来区分不同的错误类型。

示例

// Promise化的AJAX请求
function ajaxRequest(method, url, data) {
   
    return new Promise((resolve, reject) => {
   
        const xhr = new XMLHttpRequest();
        xhr.open(method, url, true);
        xhr.onload = () => {
   
            if (xhr.status >= 200 && xhr.status < 300) {
   
                resolve(xhr.response);
            } else {
   
                reject(new Error(`HTTP error: ${
     xhr.status}`));
            }
        };
        xhr.onerror = () => reject(new Error('Network error'));
        xhr.send(data);
    });
}

// 使用示例
ajaxRequest('GET', '/api/data')
    .then(response => console.log(response))
    .catch(error => console.error(error));

Fetch API:现代的网络请求方式

Fetch API提供了一个更加现代化的网络请求接口,它基于Promise,使得异步请求的处理更加简洁和优雅。

常见问题

  • 默认不包含跨域请求的头信息:Fetch API默认不会发送跨域请求所需的OriginReferer头信息。
  • 错误处理机制不同:Fetch API只有在网络错误的情况下才会reject Promise,而对于HTTP状态码错误,它会返回一个状态为resolved但ok属性为false的Response对象。

避免方法

  • 手动设置头信息:在跨域请求时,可以通过设置mode: 'cors'和适当的头信息来确保请求的正常发送。
  • 检查Response对象:在使用Fetch API时,始终检查Response对象的ok属性,以确定请求是否成功。

示例

// 使用Fetch API
fetch('/api/data', {
   
    method: 'GET',
    mode: 'cors' // 允许跨域请求
})
.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));

总结

AJAX和Fetch API都是强大的异步请求技术,它们各自有不同的优势和局限性。AJAX作为老牌技术,有着广泛的历史应用和成熟的使用模式,而Fetch API则以其现代化的接口和基于Promise的处理方式受到越来越多开发者的青睐。

在使用这些技术时,我们应该注意跨域请求的限制、错误处理的差异以及代码的可读性和可维护性。通过合理地选择和使用这些工具,我们可以构建出更加健壮和高效的前端应用。记住,无论选择哪种技术,都应该遵循最佳实践,确保用户数据的安全和应用的性能。通过不断的实践和学习,我们可以更加熟练地掌握这些技术,为用户提供更好的体验。

目录
相关文章
|
3月前
|
JSON 监控 API
掌握使用 requests 库发送各种 HTTP 请求和处理 API 响应
本课程全面讲解了使用 Python 的 requests 库进行 API 请求与响应处理,内容涵盖环境搭建、GET 与 POST 请求、参数传递、错误处理、请求头设置及实战项目开发。通过实例教学,学员可掌握基础到高级技巧,并完成天气查询应用等实际项目,适合初学者快速上手网络编程与 API 调用。
470 130
|
5月前
|
JSON JavaScript 测试技术
用Postman玩转电商API:一键测试+自动化请求教程
Postman 是电商 API 测试的高效工具,涵盖基础配置、自动化测试、环境管理与请求自动化,助你快速提升开发效率。
|
3月前
|
JSON 监控 测试技术
亚马逊:调用订单退款API自动化处理售后请求,缩短用户等待时间
在电商运营中,售后效率直接影响用户体验与平台声誉。亚马逊订单退款API为卖家提供自动化工具,通过编程方式高效处理退款请求,显著缩短用户等待时间。本文详解如何集成该API,实现退款流程自动化,提升响应速度与用户满意度。
129 0
|
4月前
|
人工智能 JSON JavaScript
【干货满满】API接口请求封装
在 Vue 项目中,常使用 Axios 与后台交互,它基于 Promise,支持浏览器和 Node.js,具备拦截请求、取消请求、JSON 转换等功能。本文介绍了 Axios 的安装、封装及使用方法,包括创建实例、请求拦截、响应处理、API 管理等内容,并提供了完整代码示例,便于统一管理和调用接口,适用于前后端分离开发模式。
|
2月前
|
缓存 监控 前端开发
顺企网 API 开发实战:搜索 / 详情接口从 0 到 1 落地(附 Elasticsearch 优化 + 错误速查)
企业API开发常陷参数、缓存、错误处理三大坑?本指南拆解顺企网双接口全流程,涵盖搜索优化、签名验证、限流应对,附可复用代码与错误速查表,助你2小时高效搞定开发,提升响应速度与稳定性。
|
2月前
|
JSON 算法 API
Python采集淘宝商品评论API接口及JSON数据返回全程指南
Python采集淘宝商品评论API接口及JSON数据返回全程指南
|
3月前
|
数据可视化 测试技术 API
从接口性能到稳定性:这些API调试工具,让你的开发过程事半功倍
在软件开发中,接口调试与测试对接口性能、稳定性、准确性及团队协作至关重要。随着开发节奏加快,传统方式已难满足需求,专业API工具成为首选。本文介绍了Apifox、Postman、YApi、SoapUI、JMeter、Swagger等主流工具,对比其功能与适用场景,并推荐Apifox作为集成度高、支持中文、可视化强的一体化解决方案,助力提升API开发与测试效率。
|
2月前
|
JSON API 数据安全/隐私保护
Python采集淘宝拍立淘按图搜索API接口及JSON数据返回全流程指南
通过以上流程,可实现淘宝拍立淘按图搜索的完整调用链路,并获取结构化的JSON商品数据,支撑电商比价、智能推荐等业务场景。
|
3月前
|
JSON 前端开发 API
如何调用体育数据足篮接口API
本文介绍如何调用体育数据API:首先选择可靠服务商并注册获取密钥,接着阅读文档了解基础URL、端点、参数及请求头,然后使用Python等语言发送请求、解析JSON数据,最后将数据应用于Web、App或分析场景,同时注意密钥安全、速率限制与错误处理。
416 152