promise封装XMLHttpRequest请求,封装ajax

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		Promise封装请求
		<script>
			// 序列化参数
			function serialize(data) {
				if (!data) return '';
				var pairs = [];
				for (var name in data) {
					if (!data.hasOwnProperty(name)) continue;
					if (typeof data[name] === 'function') continue;
					var value = data[name].toString();
					name = encodeURIComponent(name);
					value = encodeURIComponent(value);
					pairs.push(name + '=' + value);
				}
				return pairs.join('&');
			}
			// 创 Ajax 请求对象,兼容ie8,ie9
			function XHR() {
				var xObj;
				if (window.XMLHttpRequest) {
					xObj = new XMLHttpRequest();
				} else if (window.ActiveXObjext) {
					xObj = new ActiveXObject();
				}
				return xObj;
			}
			// get封装
			function ajaxForPromise(params) {
				var data = params.data
				var url = params.url
				var method = params.method || 'GET'
				var responseType = params.responseType || 'json'
				return new Promise((resolve, reject) => { // promise封装
					var xhr = XHR();
					var params = null
					xhr.onreadystatechange = handler; 
					if (method.toUpperCase() === 'GET') {
						url = url + '?' + serialize(data);
					} else if (method, toUpperCase() === 'POST') {
						params = serialize(data)
					}
					xhr.open(method, url, true);
					xhr.responseType = responseType
					xhr.send(params);

					function handler() {
						if (this.readyState !== 4) {
							return;
						}
						if (this.status === 200) {
							resolve(this.response) // 正确回调
						} else {
							reject(new Error(this.statusText)); // 错误回调
						}
					}
				})
			}
			// get请求
			let params= {
				data: {
					page: 1,
					pageSize: 10
				},
				url: 'http://www.liulongbin.top:3005/api/getnewslist'
			};
			ajaxForPromise(params).then((res) => {
				console.log(res.message); // 结果
			}).catch(err => {
				console.warn(err)
			})
		</script>
	</body>
</html>

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值