AJAX基础

Ajax简介
1.ajax就是异步的js和xml
2.通过ajax可以在浏览器中发送异步请求,最大的优势就是无刷新获取数据
3.ajax不是新语言,而是一种将现有的标准组合在一起的刷新方式

XML简介
1.xml可扩展标记语言
2.被设计用来传输和存储数据
3.xml和html类似,不同的是html中都是预定义标签,而xml中没有预定于标签
4.xml中都是自定义标签,用来表示一些数据。

//比如说我有一个学生数据:
	name="孙悟空"; age=18; gender="男";
//用xml表示
	<student>
	  <name>孙悟空</name>
	  <age>18</age>
	  <gender></gender>
	</student>

//现在xml已经被json取代,服务器返回数据的格式多为json
	{"name": "孙悟空",
	 "age": 18,
	 "gender": "男"}

AJAX特点
优点:可无需刷新页面与服务器端进行通信;允许你根据用户事件来部分更新内容。
缺点:没有浏览历史不能回退;存在跨域问题(同源);SEO不友好
在这里插入图片描述
ajax请求的基本操作

借用express使用ajax:
//1.引入express
const express = require('express');

//2.创建应用对象
const app=express();

//3.创建路由规则
//request是对请求报文的封装
//response是对响应报文的封装
app.get('/server',(request,response)=>{
	//设置响应头   设置允许跨域
	response.setHeader('Access-Control-Allow-Origin','*');
	//设置响应体
	response.send('Hello AJAX');
});

//4.监听端口启动服务
app.listen(8000,()=>{
	console.log("服务已启动,8000端口监听中...");
})

ajax就是基于浏览器提供的XMLHttpRequest对象来实现的。

//获取button元素
const btn=document.getElementsByTagName('button')[0];
//绑定事件
btn.onclick=function(){
	//1.创建对象
	const xhr=new XMLHttpRequest();
	//2.初始化 设置请求方法和url
	xhr.open('GET','http://127.0.0.1:8000/server');
	//3.发送
	xhr.send();
	//4.事件绑定  处理服务器端返回的结果
	//on  当。。。的时候
	//readystate 是xhr对象中的属性,表示状态0(初始化完毕) 1(open完成) 2(send完成) 3(服务器返回部分数据) 4(服务器返回所有数据)
	//change 状态改变时触发,readystate可发生4次改变
	xhr.onreadystatechange=function(){
		//判断(服务端返回了所有的结果)
		//响应报文:请求行 请求头 空行  请求体
		if(xhr.readyState===4){
			//判断响应状态码 200 404 403 401 500
			//2xx 成功
			if(xhr.status >= 200 && xhr.status < 300){
				console.log(xhr.status); //状态码
				console.log(xhr.statusText);  //状态字符串
				console.log(xhr.getAllResponseHeaders()); //所有响应头
				console.log(xhr.response); //响应体
			}
		}
	}
}

ajax设置请求参数
在请求地址后面加入参数。
eg:xhr.open('GET','http://127.0.0.1:8000/server?a=100&b=200&c=300');

post设置请求头与请求头(发送参数):

const result=document.getElementById("result");
result.addEventListener("mouseover",function(){
	const xhr=new XMLHttpRequest();
	xhr.open('POST','http://127.0.0.1:8000/server');
	
	//设置请求头
	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	//xhr.setRequestHeader('name','atguigu'); 自定义请求头
	
	xhr.send('a=100&b=10');
	//xhr.send('a:100&b:10');
	//xhr.send('anclnal123');
	xhr.onreadystatechange=function(){
		if(xhr.readyState===4){
			if(xhr.status >= 200 && xhr.status < 300){
				result.innerHTML=xhr.response;
			}
		}
	}
})

AJAX服务端响应json数据

const result=document.getElementById("result");
window.onkeydown=function(){
	const xhr=new XMLHttpRequest();
	xhr.responseType='json';
	xhr.open('GET','http://127.0.0.1:8000/server');
	xhr.send();
	xhr.onreadystatechange=function(){
		if(xhr.readyState===4){
			if(xhr.status >= 200 && xhr.status < 300){
				//当服务器返回的数据为json格式时需对数据进行转换
				
				/*
				在服务器传送代码时需格式转换
				const data={
					name:'atguiga'
				};
				let str=JSON.stringify(data); 对对象进行字符串转换
				response.send(str);
				*/
				
				//1.手动转换
				let data=Json.parse(xhr.response);
				result.innerHTML=data.name;
				//2.自动转换  在开始请求前设置响应体数据类型,见此模块代码第四行
				result.innerHTML=xhr.response.name;
			}
		}
	}
}

AJAX的IE缓存问题:向服务器请求数据时IE会把请求的结果缓存到浏览器中,下次再请求时则会在服务器中拿取数据,对于实时性要求高的服务无法满足数据更新。
解决IE缓存的方法是在发送请求时添加时间戳,使每次的数据都因时间不同而发生变化

xhr.open('GET','http://127.0.0.1:8000/server?t='+Data.now());

AJAX请求超时或网络异常处理

const result=document.getElementById("result");
result.addEventListener("mouseover",function(){
	const xhr=new XMLHttpRequest();
	//超时设置 2s
	xhr.timeout=2000;
	//超时回调
	xhr.ontimeout=function(){  
		alert("请求超时");
	}
	//网络异常回调
	xhr.onerror=function(){  //可通过浏览器调试时将网络选项修改为offline测试
		alert("网络异常")
	}
	xhr.open('POST','http://127.0.0.1:8000/server');
	xhr.send();
	xhr.onreadystatechange=function(){
		if(xhr.readyState===4){
			if(xhr.status >= 200 && xhr.status < 300){
				result.innerHTML=xhr.response;
			}
		}
	}
})

AJAX取消请求

<button>点击发送</button>
<button>点击取消</button>
<script>
	const btns=document.querySelectorAll('button');
	let x=null; //因x在两个函数中均使用到故需将其拿出做全局变量
	btns[0].onclick=function(){
		x=new XMLHttpRequest();
		x.open("GET",'http://127.0.0.1:8000/server');
		xhr.send();
	}
	//abort 取消
	btns[1].onclick=function(){
		x.abort();
	}
	...
</script>

AJAX解决重复请求问题

let isSending = false; //是否正在发送请求
btns[0].onclick=function(){
	//判断标识变量
	if(isSending) x.abort(); //如果正在发送则取消该变量,创建一个新的请求
	x=new XMLHttpRequest();
	//修改标识变量
	isSending=true;
	x.open("GET",'http://127.0.0.1:8000/server');
	x.send();
	x.onreadystatechange=function(){
		if(x.readyState===4){
			//修改标识变量  发送完成即可修改,无需判断响应结果是否正确
			isSending = false;
		}
	}
}

同源策略:浏览器的一种安全策略
同源:发送的请求与服务器的协议、域名、端口号都必须相同,违背同源策略就是跨域。可使用jsonp解决

nodemon
项目开发阶段因经常需对文件进行修改,修改后不断地项目重启很麻烦,故可安装nodemon工具包。
nodemon用来监视node.js应用程序中的任何更改并自动重启服务,非常适合用在开发环境中。
nodemon将监视启动目录中的文件,如果有任何文件更改,nodemon将自动重新启动node应用程序。
nodemon不需要对代码或开发方式进行任何更改。 nodemon只是简单的包装你的node应用程序,并监控任何已经改变的文件。nodemon只是node的替换包,只是在运行脚本时将其替换命令行上的node。
nodemon Git地址:github.com/remy/nodemon#nodemon
安装后重新启动项目nodemon server.js
学习视频链接

注意axios、fetch与ajax关系

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值