原生js对Ajax封装

封装

1. AJAX 请求封装

函数就可以理解为一个想要做的事情,函数体中约定了这件事情做的过程,直到调用时才开始工作。

将函数作为参数传递就像是将一个事情交给别人,这就是委托的概念


/**

* 发送一个 AJAX 请求
* @param {String}  method 请求方法* @param {String}  url   请求地址* @param {Object}  params 请求参数
* @param {Function} done  请求完成过后需要做的事情(委托/回调)

*/
function ajax (method, url, params, done) {
   
   
	// 统一转换为大写便于后续判断
	method = method.toUpperCase()
	// 对象形式的参数转换为 urlencoded 格式
	var pairs = []
	for (var key in params) {
   
   
		pairs.push(key + '=' + params[key])
	}
	
	var querystring = pairs.join('&')
	var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP')
	xhr.addEventListener('readystatechange', function () {
   
   
		if (this.readyState !== 4) 
			return
		// 尝试通过 JSON 格式解析响应体
		try {
   
   
			done(JSON.parse(this.responseText))
		} catch (e) {
   
   
			done(this.responseText)
		}
	})
	
	// 如果是 GET 请求就设置 URL 地址 问号参数
	if (method === 'GET') {
   
   
		url += '?' + querystring
	}
	
	xhr.open(method, url)
	// 如果是 POST 请求就设置请求体
	var data = null
	if (method === 'POST') {
   
   
		xhr.setRequestHeader('Content‐Type', 'application/x‐www‐form‐urlencoded')
		data = querystring
	}
	
	xhr.send(data)
}

ajax('get', './get.php', {
   
    id: 123 }, function (data) {
   
   
	console.log(data)
})
ajax('post', './post.php', {
   
    foo: 'posted data' }, function (data) {
   
   
	console.log(data)
 })

案例:正在加载中

在这里插入图片描述

jquery-ajax-event.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>jQuery全局事件处理函数</title>
  <style>
    .loading {
    
    
      display: none;
      position: fixed;
      background-color: rgba(255,0,0,.5);
      
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清河大善人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值