AJAX基础 part2

本文介绍了如何解决Internet Explorer浏览器中AJAX请求的缓存问题,通过在URL后添加时间戳避免数据不更新。同时,探讨了请求超时和网络异常的处理,以及如何在前端取消和管理请求。此外,还展示了使用jQuery进行AJAX请求的方法,包括设置请求数据类型和处理超时。最后,提到了通用型的$.ajax方法来发送请求。
摘要由CSDN通过智能技术生成

AJAX解决ie缓存问题

当前端页面向服务起连续发送两条请求时,在ie浏览器中,第二次发送走的是第一次发送时产生的缓存,所以不能够及时的更新数据,解决办法就是在请求的url后加上一个动态可变的参数,这里以当前时间戳Date.now()为例;

 xhr.open("GET",'http://127.0.0.1:8000/ie?t='+Date.now());

请求超时与网络异常

在服务端设置三秒的响应延时,模拟网络超时
在这里插入图片描述

在前端html中处理超时,并执行超时回调

在这里插入图片描述

效果

在这里插入图片描述

AJAX取消请求

<div id="result">

    </div>
    <button>点击发送请求</button>
    <button>点击取消请求</button>
const btns = document.querySelectorAll('button');
let x = null; 
btns[0].onclick = function(){
	x = new XMLHttpRequest();
	x.open('GET','http://127.0.0.1:8000/delay');
	x.send();
}
btns[1].onclick = function(){ //取消按钮点击后,取消请求
x.abort();
}

在这里插入图片描述

重复发送请求的问题

用户每点击依次发送请求按钮,页面就会向服务器发送一个请求,但是如果用户连续发送同一个请求,则会给服务器造成很大的压力,因此我们在此设置一个表示请求是否已经发送的变量,在发送请求之前判断之前是否已经正在发送该请求,如果已经发送了,那就将之前的请求取消并且创建一个新的请求。

 const btns = document.querySelectorAll('button');
        let x = null;

        let isSending = false;

        btns[0].onclick = function(){
            if(isSending) x.abort(); //如果正在发送,则取消请求,并创建一个新的请求
            x = new XMLHttpRequest();
            isSending = true;  //正在发送请求,将isSending改为true
            x.open('GET','http://127.0.0.1:8000/delay');
            x.send();
            x.onreadystatechange = function(){
                if(x.readyState === 4){
                    isSending = false; //请求完成,将isSending改为false
                }
            }
        }
        btns[1].onclick = function(){
            x.abort();
        }

jQuery发送AJAX请求

jquery使用$.get或者$.post来发送ajax请求

$('button').eq(0).click(function(){ //get请求
$.get('http://127.0.0.1:8000/iquery-server',{a:100,b:200},function(data){
	console.log(data);
            });
 })
$('button').eq(1).click(function(){//post请求
            $.post('http://127.0.0.1:8000/iquery-server',{a:100,b:200},function(data){
             console.log(data);
            });
 })

在这里插入图片描述

设置请求数据类型

我们在服务器响应返回一个json格式的数据

app.all('/iquery-server',(request, response)=>{
   
    response.setHeader('Access-Control-Allow-Origin','*');//设置响应头,设置允许跨域
    response.setHeader('Access-Control-Allow-Headers','*');
    const data = {
        name:'Sunner_Deer'
    };
    //对对象进行字符串转换
    let str = JSON.stringify(data);
    response.send(str);
});

在jquery请求中设置数据类型

$('button').eq(0).click(function(){  //设置了数据类型的请求
 	$.get('http://127.0.0.1:8000/iquery-server',{a:100,b:200},function(data){
console.log(data); 
	},'json');
})
$('button').eq(1).click(function(){//没有设置数据类型的请求
	$.post('http://127.0.0.1:8000/iquery-server',{a:100,b:200},function(data){
console.log(data);
	});
})

效果

在这里插入图片描述

通用型方法

  $('button').eq(2).click(function(){
            $.ajax({
                url:'http://127.0.0.1:8000/delay',
                //参数
                data:{a:100, b:200},
                //请求类型
                type:'GET',
                //响应体结果数据类型
                dataType:'json',
                //成功回调
                success:function(data){
                    console.log(data);
                },
                //超时时间
                timeout:2000,
                //失败回调
                error:function(){
                    console.log('出错啦!');
                }
            })
        })

乌云后面依然是灿烂的晴天 加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值