百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程文章 > 正文

封装AJAX(带详细注释)(ajax的封装原理是什么)

qiyuwang 2025-04-07 18:38 12 浏览 0 评论

封装AJAX请求是前端开发中常见的需求,可以帮助我们简化代码,提高可重用性。下面我将通过JavaScript(使用XMLHttpRequest对象)和现代JavaScript(使用Fetch API)两种方式来展示如何封装AJAX请求。


1. 使用XMLHttpRequest封装AJAX

function ajax(method, url, data, callback) {

// 创建XMLHttpRequest对象

var xhr = new XMLHttpRequest();


// 设置请求方法和URL

xhr.open(method, url, true);


// 设置请求头,这里以POST方法为例,如果是GET方法则不需要设置Content-Type

if (method === 'POST') {

xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

}


// 定义请求完成后的回调函数

xhr.onload = function() {

if (xhr.status >= 200 && xhr.status < 300) {

// 请求成功,调用回调函数并传入响应数据

callback(null, xhr.responseText);

} else {

// 请求失败,调用回调函数并传入错误信息

callback(xhr.statusText);

}

};


// 定义请求发生错误时的回调函数

xhr.onerror = function() {

callback('Request failed');

};


// 发送请求,如果是POST方法则需要传入data参数,GET方法则不需要

xhr.send(data);

}


// 使用示例

ajax('GET', 'https://api.example.com/data', null, function(error, response) {

if (error) {

console.error('Error:', error);

} else {

console.log('Response:', response);

}

});

2. 使用Fetch API封装AJAX

function fetchAjax(method, url, data = null) {

// 返回一个Promise对象,以便使用async/await处理异步操作

return new Promise((resolve, reject) => {

// 创建fetch请求配置对象

const options = {

method: method, // HTTP方法,如GET、POST等

headers: { 'Content-Type': 'application/json' }, // 设置请求头,根据需要修改Content-Type

body: data ? JSON.stringify(data) : null // 如果是POST或PUT请求,可以传递数据体

};


// 发送fetch请求

fetch(url, options)

.then(response => {

// 检查响应状态码是否在200-299之间,即成功响应范围

if (!response.ok) { // 注意这里的!response.ok是检查状态码是否不是2xx的快捷方式

throw new Error('Network response was not ok'); // 如果不是,则抛出错误

}

return response.json(); // 将响应体解析为JSON格式,以便后续处理

})

.then(data => { // 处理解析后的JSON数据

resolve(data); // 使用resolve传递成功结果给Promise的then链或async/await调用者

})

.catch(error => { // 捕获并处理错误情况,例如网络错误或解析JSON失败等

reject(error); // 使用reject传递错误信息给Promise的catch链或async/await调用者

});

});

}


// 使用示例(使用async/await)

async function fetchData() {

try {

const data = await fetchAjax('GET', '
https://api.example.com/data'); // 等待Promise解析完成并获取数据

console.log('Data:', data); // 成功获取数据后打印到控制台

} catch (error) {

console.error('Error:', error); // 捕获并打印错误信息到控制台

}

}

fetchData(); // 调用函数执行AJAX请求和数据处理流程

总结:


XMLHttpRequest 是早期浏览器支持的标准方式,适用于所有浏览器。但代码比较繁琐,特别是在处理异步操作时。


Fetch API 是现代浏览器支持的标准方式,提供了更简洁的语法和更好的错误处理机制。它基于Promise,可以轻松与async/await结合使用,使异步代码更加直观和易于管理。推荐在支持Fetch API的现代浏览器中使用。

相关推荐

centos7使用yum安装nginx+php7+mysql5.6

本文主要介绍安装在centos7下如何安装nginx+php+mysql的环境,centos7的版本自带安装源的版本无法实现PHP5.4以上的版本,数据库默认用的是mariadb,文章介绍的安装是如何...

Linux基础入门(VMWare中CentOS7配置yum)

上一章节,介绍了《Linux基础入门(CentOS7下通过命令行配置网络)》,本章将介绍如何配置yum源,方便后续在学习和使用的过程中,对所需工具的安装;...

CentOS 7搭建Nextcloud私有云(centos搭建云盘)

Nextcloud简介:对于私人网盘,其中最出名的就是seafile、owncloud和nextcloud。seafile是国人开发的,有免费和企业版,免费的功能有限;nextcloud是owncl...

分享一个docker镜像源地址,解决docker不能拉取的问题

自己搭建的代理,centos7只需要修改/etc/docker/daemon.json并输入以下内容:{"registry-mirrors":["https://next...

源支付5.18版全套开源源码客户端+云端+监控+协议三网免挂免输入

源支付5.18最新版协议去授权全套三端开源源码_客户端+云端+监控+协议三网免挂免输入(全套版)推荐系统为:CentOS7.6Linux系统环境:Nginx1.20.1+MySQL5.6....

centos7飞速搭建zabbix5.0并添加windows、linux监控

一、环境zabbix所在服务器系统为centos7,监控的服务器为windows2016和centos7。二、安装zabbix官方安装帮助页面...

CentOS上配置 Docker 使用代理服务器

hub.docker最近总被墙,国内大厂搞的docker镜像源代理被封被停,对于一个严重依赖一些海外项目的软件开发人员,简直没法干活了。docker要在CentOS上配置Docker使用代理服...

CentOS 7 (阿里云虚拟机) 安装 Docker

一、安装Docker1.使用root权限登录CentOS。确保yum包更新到最新sudoyumupdate...

Centos离线静默安装 oracle11g,步骤细验证成功

一、环境要求1.1.涉及工具及环境1)CentOS764位系统2)oracle安装包文件a)linux.x64_11gR2_database_1of2.zip...

Linux运维之制作指定软件包的YUM源

#挑战30天在头条写日记#关注我,不迷路,大家好,我是大王。--记录运维中遇到的故障及排查方法...

在CentOS 9 安装Nvidia显卡驱动详细操作步骤

今天给粉丝网友演示CentOS9系统下如何安装nvidia显卡驱动。·将下载好的显卡驱动放到文件夹中,这里以download为例,放入文件夹中开始对系统软件升级,是为了防止在安装显卡驱动时显示报错...

基于Linux系统的本地Yum源搭建与配置(ISO方式、RPM方式)

前言:由于公司业务服务器大部分都在内网环境下运行,内网环境无法直接使用yum安装升级更新软件,所以需要自建Yum源来满足目前日常工作需要。...

最新zabbix一键安装脚本(基于centos8)

一、环境准备注意:操作系统必须是centos8及以上的,因为我配的安装源是centos8的。并且必须连接互联网,脚本是基于yum安装的!!!...

CentOS7中使用yum安装Nginx的方法

1、添加源  默认情况Centos7中无Nginx的源,最近发现Nginx官网提供了Centos的源地址。因此可以如下执行命令添加源(...

Centos8出现Failed to download metadata for repo &#39;AppStream&#39;解决

大家都知道Centos8于2021年年底停止了服务,大家再在使用yum源安装时候,出现下面错误“错误:Failedtodownloadmetadataforrepo'AppStre...

取消回复欢迎 发表评论: