Ajax(js中你必须拥有的知识点)

环境:Ajax是必须要在服务器环境下运行的!
Ajax:是前后端交互的重要手段
全称:Asynchronous(异步) JavaScript and Xml(数据)
注意:我们现在交互用的数据是json不是Xml(过时)了

一、首先要了解异步和同步

打个比方:假如你想让四个手下分别去执行四个不同的任务,
如果用“同步”的方法,就要先让第一个人去执行任务,这期间你和另外三个手下就呆呆地等,什么也不干,直到第一个人完成任务回来报告后再让第二个人去执行任务,依此类推;
而如果用“异步”的方法,就可以把四个手下同时派出去执行任务,然后自己就可以去喝酒唱歌了,手下完成任务后只需要用手机向你汇报结果即可。

二、为什么使用AJax,它的优缺点是什么

优点
①异步:同时执行,效率高,当前请求不会影响到其他的程序。
②可以在不中断游览器其他任务的情况下,加载新数据,也就是无刷新加载数据
③提高用户体验,节约了性能。
缺点
①不刷新,不会产生历史记录,破坏了浏览器前进后退功能。(你请求了新数据的话,你的老数据就没有了,不是破坏整个,仅仅破坏了Ajax的请求的那一部分)
②因为新数据是将来才有可能拿到,那么会让搜索引擎爬虫,忽略新数据中的关键字,降低网站搜索排名(因为没有刷新啊!)

三、Ajax是如何请求的

这里我推荐一位李老师的理解方式
准备一个手机:创建出一个xhr对象。
准备拨号:选择什么方式打电话(听筒还是免提),打给谁?(号码多少)
                     什么方式打电话:get(免提)/post(听筒)…
                     打给谁?号码多少:请求的地址。
接通了:要说什么话?(就是发送的数据)
观察状态:手机有没有问题,信号运营商有没有问题四

		let xhr=new XMLHttpRequest(); //准备手机
		xhr.open("请求方式",请求地址);//准备拨号
		xhr.send();//接通了
		xhr.onreadystatechange=function(){ //观察状态(这是一个js异步事件)
			if(xhr.readyState==4&&xhr.status==200)//分别是手机状态和信号运营商的状态
			{
				console.log(xhr.responseText);//读取到对方信息!
			}
		}

四、get/post请求方式的区别

get:发送数据的方式安全性不高,发送数据的大小也只有4KB左右!不过发送的速度是快的!它发送数据的方式是在地址栏后面添加数据!

		let url="http://www.baidu.com?×××=×××&×××=×××&...."//问号后面就是添加的格式

post:发送数据的方式安全性高,发送的数据大小比get大的多IIS 6.0默认上传文件的最大大小是4MB。发送速度比get慢!它发送数据的方式是在xhr.send()括号内添加字符且格式也为×××&×××=×××&…不过还需要加一个表头信息规定数据类型。

xhr.setRequestHeader("content-type","application/x-www-form-urlencoded");//表头信息
xhr.send("×××&×××=×××&....");//发送数据格式

五、如何解决Ajax请求服务器的缓存缺点

data/hello.text?×××&×××=×××&wd=123456;
data/hello.text?×××&×××=×××&wd=785495;
这两个地址对于游览器来说不是同一个地址,但是是同一个资源
所以解决缓存问题的方法就是在地址后面加一个随机的后缀。
这里我们惯用时间戳来解决。

六、给一份原生封装的Ajax方法

function ajaxGetPost(ops){
		ops.method=ops.method||"get";//设置默认参数
		ops.data=ops.data||{};//设置默认参数
		let str="";
		for(var key in ops.data){
			str+=`${key}=${ops.data[key]}&`;  //遍历形成规定的数据形式
		}
		let xhr=new XMLHttpRequest();//准备电话
		let t=new Date().getTime(); //时间戳
		ops.url=ops.method=="get"?ops.url+'?'+str+"w_t="+t:ops.url;//三目方式在地址栏添加数据
		xhr.open(ops.method,ops.url);//准备拨号
		if(ops.method=="post"){
			xhr.setRequestHeader("content-type","application/x-www-form-urlencoded");//设置表头信息
			//str[str.lastIndexOf("&")]=""; //多一个&符放在send()里面依然没有问题!
			xhr.send(str);//post方式发送数据
		}else{
			xhr.send();
		}
		xhr.onreadystatechange=function(){//观察状态
			if(xhr.readyState==4&&xhr.status==200){
				cb(xhr.responseText);
			}
		}
	}

以上就是我堆Ajax的理解!送给大家!
最后希望疫情早日结束!逆战必胜!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值