Ajax函数封装

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title></title>
</head>
<body>
    <script type="text/javascript">
    function ajax(options){
        // 存储的是默认值
    	var defaults={
    		type:'get',
    		url:'',
    		data:{},
    		header:{
    			'Content-Type':'application/x-www-form-urlencoded'
    		},
    		success:function(){},
    		error:function(){}
    	};
    	// 使用options对象中的属性覆盖defaults对象中的属性
    	Object.assign(defaults,options);
        // 创建ajax对象
        var xhr = new XMLHttpRequest();
        // 拼接请求参数的变量
        var params = '';
        // 循环用户传递过来的对象格式参数
        for (var attr in defaults.data) {
            params += attr + '=' + defaults.data[attr] + '&';
        }
        // 将参数最后面的&截取调
        // 将截取的结果重新赋值给params变量
        params = params.substr(0, params.length - 1);
        // 判断请求方式
        if (defaults.type == 'get') {
            defaults.url = defaults.url + '?' + params;
        }
        // 配置ajax对象
        xhr.open(defaults.type, defaults.url);
        // 如果请求方式为post
        if (defaults.type == 'post') {
            // 用户希望的向服务器传递的请求参数的类型
            var contentType = defaults.header['Content-Type'];
            // 设置请求参数格式的类型
            xhr.setRequestHeader('Content-Type', contentType);
            // 判断用户希望的请求参数格式的类型
            // 如果类型为json
            if (contentType == "application/json") {
                // 向服务器端传递json数据格式的参数
                xhr.send(JSON.stringify(defaults.data));
            } else {
                // 向服务器端传递普通类型的请求参数
                xhr.send(params);
            }
        } else {
            // 发送请求
            xhr.send();
        }
        // 监听xhr对象下面的onload事件
        // 当xhr对象接收完响应数据后触发
        xhr.onload = function() {
        	// 获取响应头中的数据
        	var contentType=xhr.getResponseHeader('Content-Type');
        	// 服务器端返回的数据
        	var responseText=xhr.responseText;
        	// 如果响应类型中包含application/json
        	if(contentType.includes('application/json')){
        		// 将json字符串转换为json对象
        		responseText=JSON.parse(responseText)
        	}
        	// 当http状态码等于200的时候
            if (xhr.status == 200) {
            	// 请求成功 调用处理成功情况的函数
                defaults.success(responseText);
            } else {
            	// 请求失败 调用处理失败情况的函数
            	defaults.error(responseText,xhr);
            }
        };
    }
    
    // 调用函数
    ajax({
        // 请求地址
        url: 'http://localhost:3000/responseData',
        success: function(data) {
            console.log('这里是success函数');
            console.log(data);
        },
        error: function(data,xhr) {
        	console.log('这里是error函数');
        	console.log(data);
        	console.log(xhr);
        }
    })
    </script>
</body>
</html>

对应的路由代码

app.get('/responseData', (req, res) => {
    res.send({ "name": "zhangsan" })
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值