Ajax同步与异步在代码中的体现

同步与异步在Ajax代码中的最大区别:

下面是同步的代码:xhr.readyState==4表示数据解析完成,而在同步操作中在xhr.sead(null)后已经xhr.readState==4了
所以我们不需要用回调函数了:
    username.addEventListener("blur",function(){
            var xhr =new XMLHttpRequest();
            xhr.open("get","checkUsername.php?uname="+username.value,false);
            console.log(xhr.readyState);//1
            xhr.send(null);
            console.log(xhr.readyState);//4
            xhr.onreadystatechange=function(){
                if(xhr.readyState==4){
                    if (xhr.status==200){
                        var result=xhr.responseText;
                        console.log(result);
                    }
                }
            }
        })
        所以代码一个换成:
                username.addEventListener("blur", function() {
                var xhr = new XMLHttpRequest();
                xhr.open("get", "checkUsername.php?uname=" + username.value, false);
                console.log(xhr.readyState);
                xhr.send(null);
                console.log(xhr.readyState);
                if (xhr.readyState == 4) {
                    if (xhr.status == 200) {
                        var result = xhr.responseText;
                        console.log(result);
                    }
                }
            })
            我是这样理解的:同步是要按照顺序先后来的,所以在执行了xhr.open的时候xhr.readyState==1;
            然后再执行xhr.send()这里是传递数据,这里时间长,同步会卡死,等执行xhr.send()完以后才开始下一步所以这个时候xhr.readyState已经==4了
            所以就不需要回调函数再去让xhr.readyState==4;
下面是异步的代码:
    在异步操作中,在没有执行回调函数时,xhr.readyState==1,所以要用到回调函数让xhr.readyState==4;
    useryx.addEventListener("blur", function() {
                var xhr = new XMLHttpRequest();
                xhr.open("post", "checkEmail.php", true);
                xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded",true );
                console.log(xhr.readyState);//1
                var parse = "e=" + useryx.value;
                xhr.send(parse);
                console.log(xhr.readyState);//1
                xhr.onreadystatechange = function() {
                    if (xhr.readyState == 4) {
                        if (xhr.status == 200) {
                            var result = xhr.responseText;
                            console.log(result);
                        }
                    }
                }
            })
            异步操作时在执行xhr.send(),正常来说异步这里也会卡死,因为JS是单线程,但是游览器是多线程的,
            在异步中,xhr.send()在传递数据时时间,游览器会执行下面的语句,所以我们在xhr.send()下面的输出语句是==1,
            正常来说send()执行完以后,xhr.readyState应该不是==1.因为JS是单线程.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值