zoukankan      html  css  js  c++  java
  • jQueryAjax同步异步区别

    在项目开发过程中,要实现这么一个功能

    <!-- 当我点击就业的时候,触发onclick时间,check()方法里通过ajax请求返回数据,
      如果该用户已经毕业可以跳转到job.html如果没有毕业不能跳转页面同时弹框提示 -->
           <a href="job.html"  onclick="return check()">就业</a>
    

    我们都知道onclick是优先执行于href属性的,只有onclick返回true才会执行href。接下来看js怎么写的

    function check(){
            var fal=false;
            $.post("URL", function(date){
                if(date==null || date==""){
                    fal=true;
                    return fal;//其实这个return也只是返回ajax中function的返回值。而不是check()的返回值
                }else{
                    alert("请先毕业才能就业")
                }
            })
            
            return fal;
            /*最终发现如果该用户已经毕业,a标签没有任何反应,
            如果还没有毕业,会提示:请先毕业才能就业。界面也是没有反应*/
    }
    

    这就很纳闷了,明明返回数据是空,fal变成了ture,怎么最终返回还是false。这就是同步和异步的区别了。

    首先,ajax默认情况下是异步的,那什么是异步呢

    async默认的设置值为true,这种情况为异步方式,就是说当ajax发送请求后,在等待server端返回的这个过程中,前台会继续 执行ajax块后面的脚本,直到server端返回正确的结果才会去执行success,也就是说这时候执行的是两个线程,ajax块发出请求后一个线程 和ajax块后面的脚本(另一个线程)


    $(function() {  
                $.ajax({  
                    type : 'post',  
                    async : true,  
                    url : '',  
                    cache : false,  
                    data : {},  
                    success : function(data){  
                        alert("1111");  
                    }  
                });  
                alert("22222");  
            });  
            /*在这里方法中,因为它是异步的,所以它在通过ajax向后端交互的同时,它还会向下执行js代码,就相当于有两个线程
            所以这里是会先弹出"2222",才会弹出"1111",到这个时候,才知道为什么上面js为什么总是返回false,因为异步的时候
            它先执行了下面的return fal,就已经返回flase了*/
    

    所以我们只要把async的属性值改为false就变成同步了

    $.post没有这个同步异步设置 ,如果一定要设置异步,只能在执行$.post之前加$.ajaxSettings.async = false;(同步执
    行)

    所以把最上面js改成同步,就可以实现相关功能了

    function check(){
            var fal=false;
             $.ajax({  
                    type: "POST",  
                    url: "url",  
                    async:false,  //同步方式   
                    success: function(re){  
                        if(re==null||re==""){
                            fal=true;        
                        }else{
                            alert("请先毕业才能就业");    
                      } 
                    } 
                }); 
             return fal; 
        }
    

    同步和异步的区别

    简单理解:同步的意思是当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载,页面出去假死状态,当这个AJAX执行完毕后才会继续运行其他代码页面假死状态解除。
    而异步则这个AJAX代码运行中的时候其他代码一样可以运行。

    异步:
    在异步模式下,当我们使用AJAX发送完请求后,可能还有代码需要执行。这个时候可能由于种种原因导致服务器还没有响应我们的请求,但是因为我们采用了异步执行方式,所有包含AJAX请求代码的函数中的剩余代码将继续执行。如果我们是将请求结果交由另外一个JS函数去处理的,那么,这个时候就好比两条线程同时执行一样。

    同步:
    在同步模式下,当我们使用AJAX发送完请求后,后续还有代码需要执行,我们同样将服务器响应交由另一个JS函数去处理,但是这时的代码执行情况是:在服务器没有响应或者处理响应结果的JS函数还没有处理完成return时,包含请求代码的函数的剩余代码是不能够执行的。就好比单线程一样,请求发出后就进入阻塞状态,知道接触阻塞余下的代码才会继续执行。

  • 相关阅读:
    Apache 阿帕奇 配置运行环境
    2019年6月多校联训b层——搜索算法 Problem A 宽搜 营救
    西安集训B Day1 test 问题 C: 小明的城堡
    西安集训B层Day1 test 问题 A: 旅行日记
    二分答案—洛谷P1182 数列分段`Section II`
    2019.5.25 Noip模拟测试2 T2题解
    2019.5.25 Noip模拟测试2 T1题解
    DP专题练习 toasting
    2019.5.1 DP专题训练 山峰数(hill)
    React 点击按钮显示div与隐藏div
  • 原文地址:https://www.cnblogs.com/laohaozi/p/12537549.html
Copyright © 2011-2022 走看看