[聚合文章] 【jQuery】(7)---jQueryAjax同步异步区别

jQuery 2018-01-17 16 阅读

【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】

 

注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。