zoukankan      html  css  js  c++  java
  • 【jQuery】(7)---jQueryAjax同步异步区别

    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块后面的脚本(另一个线程)

    js举例:

        $(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时,包含请求代码的函数的剩余代码是不能够执行的。就好比单线程一样,请求发出后就进入阻塞状态,知道接触阻塞余下的代码才会继续执行。

    如果哪里理解不到位,或者理解错了,欢迎指点。

    想的太多,做的太少,中间的落差就是烦恼,要么去做,要么别想 少尉【17】

  • 相关阅读:
    linked-list-cycle-ii leetcode C++
    linked-list-cycle-ii leetcode C++
    binary-tree-maximum-path-sum leetcode C++
    0090 变量的概念,变量的使用:声明、赋值、初始化、语法扩展、命名规范
    0089 变量的概念
    0087 JavaScript注释,JavaScript输入输出语句
    0086 初识JavaScript:是什么、浏览器执行 JS(渲染引擎、解释引擎)、组成、初体验
    0085 计算机基础简介
    0084 编程语言简介
    0083 移动端WEB开发之响应式布局、bootstrap
  • 原文地址:https://www.cnblogs.com/qdhxhz/p/8306693.html
Copyright © 2011-2022 走看看