node.js -- Ajax封装

本文介绍了如何通过函数封装简化Ajax请求代码,解决了代码冗余问题。文章详细阐述了封装过程,包括根据请求方式(GET、POST)处理请求参数,并讨论了请求参数的位置和格式,特别是JSON格式在传递复杂数据时的优势。示例代码展示了如何处理和拼接请求参数,以适应不同请求方式的需求。
摘要由CSDN通过智能技术生成

文章目录


Ajax封装

问题:发送一次请求代码过多,发送多次请求代码冗余且重复
解决方案:将请求代码封装到函数中,发送请求时调用函数即可

 console.log('before');
 setTimeout(
    () => { console.log('last');
 }, 2000);
 console.log('after');
 ajax({ 
     type: 'get',                       //请求方式   
     url: 'http://www.example.com',     //请求地址
     success: function (data) {         //请求成功后处理的结果,data形参代表请求结果
         console.log(data);
     }
 })

ajax封装示例
(最简单、最基础)能够向服务器端发送请求,也能够接收服务器端的响应

function ajax(option) {
	//创建ajax对象
	var xhr = new XMLHttpRequest();
	//配置ajax对象
	xhr.open(options.type, options.url);   //通过形参options来拿到ajax对象中的属性
	//发送请求
	xhr.send();
	//监听xhr对象下面的onload事件
	//当xhr对象接收完响应数据后触发
	xhr.onload = function () {      //把调用成功后想要执行的响应放到函数外面去
		options.success(xhr.responseText);
	}
}
ajax({
	//请求方式
	type:'get',
	//请求地址
	url: 'http://localhost:3000/first',
	success: function (data) {    //在onload函数调用的时候有实参的传递,则此处就有data形参
		console.log('这里是success函数'+data)
	}
})

请求参数

在发送请求时向服务器传递请求参数,需要考虑get方式是将请求参数拼接在url地址后面,而post请求方式是需要将请求参数放在请求体即send()方法中,综合考虑,请求参数应该传递在ajax函数中,在函数内部再去根据请求方式的不同去将请求参数拼接在不同的位置。
请求参数要考虑的问题:

  1. 请求参数位置的问题
    将请求参数传递到ajax函数内部,在函数内部根据请求方式的不同将请求参数放置在不同的位置
    get—放在请求地址的后面
    post----放在send方法中
  2. 请求参数格式的问题
    主要有两种格式:
    application/x-www-form-urlencoded 即 参数名称=参数值&参数名称=参数值 name=zhangsan&age=20
    application/json 即 {name: ‘zhangsan’ , age : 20 }
    综上json格式更加方便传递
    我们需要根据content-type来判断需要传递的参数格式。
    由于(1)传递对象数据类型对于函数的调用者更加友好;(2)在函数内部将对象数据类型转换成字符串数据类型更加方便。故在data中存放的是一个对象
function ajax(option) {
	//创建ajax对象
	var xhr = new XMLHttpRequest();
	//拼接请求参数的变量     options.data就可以拿到请求参数的变量
	var params = '';
	//需要将{
	//	name: 'zhangsan';
	//	age: 20
	//}
	//拼接成 name=zhangsan&age=20
	//转换数据格式,只需要循环用户传递进来的对象格式对象即可
	for (var attr in options.data) {   //属性name/age就是attr
		//将参数转换为字符串格式
		params += attr + '=' + options.data[attr] + '&';     //因为data后面不能.变量,就需要用中括号的形式
	}     //此时name=zhangsan&age=20&   参数后面多了一个&
	//对字符串进行截取,将参数最后面&截取掉
	//将截取的结果重新赋值给params变量
	params = params.substr(0,params.length -1);

	//判断请求方式,根据get、post的不同将请求参数拼接到不同的地方
	if (options.type == 'get') {
		options.url = options.url + '?' + params;
	}
	
	
	//配置ajax对象
	xhr.open(options.type, options.url);   //通过形参options来拿到ajax对象中的属性

	//如果请求参数为post,发送请求
	if (options.type == 'post') {
		//如果是post形式,必须要设置请求参数格式的类型
		xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		xhr.send(params)
	} else {  //反之若为get
		xhr.send();
	}
	//监听xhr对象下面的onload事件
	//当xhr对象接收完响应数据后触发
	xhr.onload = function () {      //把调用成功后想要执行的响应放到函数外面去
		options.success(xhr.responseText);
	}
}
ajax({
	//请求方式
	type:'get',
	//请求地址
	url: 'http://localhost:3000/first',
	data: {
		name: 'zhangsan';
		age: 20
	}
	success: function (data) {    //在onload函数调用的时候有实参的传递,则此处就有data形参
		console.log('这里是success函数'+data)
	}
})

未完待续…

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值