ajax的小总结

一:同步与异步的概念:

也可以简单的把他们理解为做一件事情的过程

当在同步机制:在做一件事情时侯,就死死的坐在那里等着结果出来,再做其他事情;

而异步机制,再做一件事情的同时,不会等待结果出来,会跳过此事件,进行下面的其他处理;

所以,在ajax的四个步骤中,sync很容易会在send()这里卡死,因为它要等待发送的请求返回,才可进行下一步操作;而async则不会被send()影响;

二:原生ajax(写法);

当type为get请求时;

var xhr=null;
            if(window.XMLHttpRequest){
                xhr=new XMLHttpRequest();
            }else{
                xhr=new ActiveXObject("Microsoft.XMLHTTP")
            }
            xhr.open("get",url,true),;
            xhr.send(null);
            xhr.onreadystatechange=function(){
                if (xhr.readystate==4) {
                    if (xhr.state==200) {
                        var result=this.responseText;
              console.log(result);
                    };

当type为post请求时;

var xhr=null;
            if(window.XMLHttpRequest){
                xhr=new XMLHttpRequest();
            }else{
                xhr=new ActiveXObject("Microsoft.XMLHTTP")
            }
            xhr.open("post",url, true);
            //post与get的问题
            //请求的参数
            var parse =  " ";
            xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
            xhr.send(parse);
            xhr.onreadystatechange=function(){
                if (xhr.readystate==4) {
                    if (xhr.state==200) {
                        var result=this.responseText;
                document.getElementById("result").innerText=result;
                    };

三:JQuery的ajax的相关API使用

引用外部文件:

<script type="text/javascript src="jquery.js"></script>

<script type="text/html">

window.οnlοad=function(){

var btn=document.getElementById("btn");

btn.οnclick=function(){

$.ajax({

url:"https://suggest.toabao.com/sug",

data:{q: textValue},

success:function(data){

console.log(data);

},

dataType:"jsonp",

jsonp:"callback",

jsoncallback:"nan"

});

}

}

</script>

四:底层原理分析:

关键词:js=>单线程  ; 事件队伍

async:顺序是从上往下执行的,当遇到function时,js做的唯一事情就是把function放到事件队伍中,

当线程内所有事件都执行完毕后,js空闲下来,会去事件队伍中

因为js是属于单线程的处理,事件执行的查看一下有没有方法达到可促发的事件;

sync:就是因为js是单线程的,它的顺序永远都是从上往下去执行的,因为是sync的工作机制,所以,遇到一个function方法时,

线程会停下下面的程序的解析,等待funcntion完成工作并返回值后,线程才会继续下面的活动;

五:缓存问题及处理方式

有三大问题:缓存穿透    缓存雪崩      缓存击穿

1/缓存的使用: 就是查找数据的过程;

当业务系统发出一个请求时候,会首先判断缓存中有没有这个数据,有则返回,没有则向数据库发出查询,然后返回数据;

2/什么是缓存的穿透?

就是业务系统访问数据压根就不存在;

在缓存中找不到,在数据库中也找不到;

3/缓存穿透的危害?

大大损失了数据库的性能;如果查询海量不存在的数据,这些数据请求在缓存中找不到,会全部查询会落在数据库身上,

致数据库压力暴增,严重会致数据库崩溃!

4/为什么会发生缓存穿透?

主要是代码的逻辑问题,由程序员背锅,后果:可导致别人对数据库的恶意攻击;

会穿透也是因为缓存中没有存储空数据的key,导致这些请求直接落在数据库身上!

总结:缓存的角色是为了帮数据库分担部分查询压力,起保护数据库的作用;

5/什么是缓存雪崩?

原本帮数据库抵挡大量查询的缓存,发生宕机,导致这些数据一窝蜂的涌向数据库,这时数据库受不了这突如起来的剧压,

就会崩溃!

宕机:停掉机器叫做down机,死机;

6/什么是缓存击穿?

就是热点数据集中失败;

7/为什么会有缓存击穿?

一般会给缓存设定一个失效时间,过了这个时间,该数据库会被缓存直接删掉,以保证数据的实时性!

六: 跨域请求及解决方法

跨域的目标:我们需要在自己的前端页面中,访问别人网址的数据;

跨域的本质:就是服务器返回一个方法的调用,这个方法是事先定义好的,而方法的参数就是我们想要数据;

利用script跨域能干什么?

1/ 访问外部的js文件

2/ 也可访问外部的php文件

3/ 动态创建script标签

4/ 前端界面决定方法名称

5/ 给window增加属性进行方法定义

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值