Ajax学习笔记-Ajax的封装-8

<!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)
				
				var xhr=new XMLHttpRequest()
				//拼接参数路径
				var params=''
				for(var attr in defaults.data){
					params+=attr+'='+defaults.data[attr]+'&'
				}
				params=params.substr(0,params.length-1)//把最后一个&去除
				//判断请求类型,执行不同代码
				if (defaults.type =='get'){	
					xhr.open(defaults.type,defaults.url+'?'+params)
					xhr.send()
				}else if(defaults.type =='post'){
					xhr.open(defaults.type,defaults.url)
					var contentType=defaults.header['Content-Type']
					xhr.setRequestHeader('Content-Type',contentType)
					if(contentType=='application/json'){
						//如果参数是以json形式传递的,就直接传递,无需处理
						//但是参数传递需要是字符串,所以转化一下
						xhr.send(JSON.stringify(defaults.data))
					}else{
						//如果参数是以其他形式传递的,就需要处理拼接一下
						xhr.send(params)
					}
				}
				//服务器返回信息后,执行这里
				xhr.onload=function(){ 
					//判断响应头中的数据类型
					var contentType=xhr.getResponseHeader('Content-Type')
					var responseText=xhr.responseText
					//如果响应类型中包含application/json,说明传过来的是的json对应的字符串
					if(contentType.includes('application/json')){
						//那就把它转换为json对象,其他类型的则不转换
						responseText=JSON.parse(responseText)
					}
					if(xhr.status==200){
						defaults.success(responseText,xhr)
					}else{
						defaults.error(responseText,xhr)
					}
				}
			}
			
			
			//调用ajax
			ajax({
				url:'http://localhost:3000/readystate',
				data:{
					name:'zhangsan',
					age:20
				},
				header:{
					'Content-Type':'application/json'
				},
				success:function(data){
					console.log(data)
				}
			})
			
			
		</script>

	</body>
</html>

这次调用 ajax对应的路由:

app.get('/readystate',(req,res)=>{
	res.send({name:"zhangsan",age:199})
})

也就是说,这样封装之后,需要使用ajax的时候,只要调用函数就行:

//调用ajax
			ajax({
				type:'post'
				url:'http://localhost:3000/readystate',
				//请求参数
				data:{
					name:'zhangsan',
					age:20
				},
				//请求参数的类型
				header:{
					'Content-Type':'application/json'
				},
				success:function(data,err){
					//data对应服务器返回的信息
					//err对应服务器的处理信息:成功信息
					console.log(data)
					console.log(err)
					//想写什么样的功能就在这里写
				},
				error:function(data,err){
					//data对应服务器返回的信息
					//err对应服务器的处理信息:报错信息
					console.log(data)
					console.log(err)
					//想写什么样的功能就在这里写
				}
			})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值