前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JavaScript手写实现AJAX请求以及使用Promise封装AJAX请求

JavaScript手写实现AJAX请求以及使用Promise封装AJAX请求

作者头像
henu_Newxc03
发布2022-05-05 18:11:44
1.2K0
发布2022-05-05 18:11:44
举报
文章被收录于专栏:Newxc03的前端之路

😌 AJAX概念

AJAX是 Asynchronous JavaScript and XML 的缩写,指的是通过 JavaScript 的 异步通信,从服务器 获取 XML 文档从中提取数据,再更新当前网⻚的对应部分,而不用刷新整个网⻚。

🤓 实现步骤

  1. 创建一个XMLHttpRequest对象
  2. 在这个对象上使用open()方法创建一个http请求,open方法所需要的参数是请求的方法请求的地址是否异步用户的认证信息
  3. 在发起请求之前,可以为这个对象添加一些信息和监听函数。比如可以通过setRequestHeader方法来为请求添加头信息。还可以为这个对象添加一个状态监听函数。一个XMLHttpRequest对象一共有5个状态,当它的状态变化时会触发onreadystatechange事件,可以通过设置监听函数,来处理请求成功后的结果。当对象的readyState变为4的时候,代表服务器返回的数据接收完成,这个时候可以通过判断请求的状态,如果状态是2xx304的话就代表返回正常。这个时候就可以通过response中的数据对页面进行更新了。
  4. 当对象的属性和监听函数 设置完成后,最后调用sent()方法来向服务器发起请求,可以传入参数作为发送的数据体。

😎 代码实现

代码语言:javascript
复制
const SERVER_URL="/server";
let xhr=new XMLHttpRequest();
//创建HTTP请求
xhr.open("GET",	SERVER_URL,true);
//设置状态监听函数
xhr.onreadystatechange=function(){
	if(this.readyState!==4)return;
	//当请求成功时
	if(this.status===200){
		handle(this.response);
	}else{
		console.error(this.statusText);
	}
};
//设置请求失败时的监听函数
xhr.onerror=function(){
	console.error(this.statusText);
};
//设置请求头信息
xhr.response='json';
xhr.setRequestHeader("Accept","application/json");
//发送HTTP请求
xhr.send(null);

使用Promise封装

代码语言:javascript
复制
function getJSON(url) {
	// 创建一个Promise对象
	let promise = new Promise(function(resolve, reject) {
	let xhr = new XMLHttpRequest(); 
	// 新建一个http请求
	xhr.open("GET", url, true);
	//设置状态监听函数
	xhr.onreadystatechange = function() { 
		if (this.readyState !== 4) return; 
		// 当请求失败或成功改变Promise状态
		if (this.status === 200) {
    	    resolve(this.response);
    	  } else {
    	    reject(new Error(this.statusText));
    	  }
	};
	//设置错误监听函数
  	  xhr.onerror = function() {
   	   reject(new Error(this.statusText));
	};
	//设置响应的数据类型
	xhr.responseType = "json";
	//设置请求头信息
	xhr.setRequestHeader("Accept", "application/json"); 
	// 发送http请求
    xhr.send(null);
  });
  return promise;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 😌 AJAX概念
  • 🤓 实现步骤
  • 😎 代码实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档