【前端】ajax中的async属性值之同步和异步及同步和异步区别

在Jquery中ajax方法中async用于控制同步和异步,当async值为true时是异步请求,当async值为fase时是同步请求。

ajax中async这个属性,用于控制请求数据的方式,默认是true,即默认以异步的方式请求数据。有时项目中会用到AJAX同步。这个同步的意思是当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载,页面出现假死状态,当这个AJAX执行完毕后才会继续运行其他代码页面假死状态解除。而异步则这个AJAX代码运行中的时候其他代码一样可以运行。

一、async值为true (异步)

当ajax发送请求后,在等待server端返回的这个过程中,前台会继续 执行ajax块后面的脚本,直到server端返回正确的结果才会去执行success,也就是说这时候执行的是两个线程,ajax块发出请求后一个线程 和ajax块后面的脚本(另一个线程)
例如

$.ajax({ 
 type:"POST", 
 url:"Venue.aspx?act=init", 
 dataType:"html", 
 success:function(result){ 
 function1()
 } 
 failure:function (result) { 
 alert('Failed'); 
 }, 
 } 
 function2();

在上例中,当ajax块发出请求后,他将停留function1(),等待server端的返回,但同时(在这个等待过程中),前台会去执行function2()。

二、async值为false (同步)

当执行当前AJAX的时候会停止执行后面的JS代码,直到AJAX执行完毕后时,才能继续执行后面的JS代码。
例如

$.ajax({
 type:"POST",
 url:"Venue.aspx?act=init",
 dataType:"html",
 async: false,
 success:function(result){
 function1()
 }
 failure:function (result) {
 alert('Failed');
 },
 }
 function2();

当把asyn设为false时,这时ajax的请求时同步的,也就是说,这个时候ajax块发出请求后,他会等待在function1()这个地方,不会去执行function2(),直到function1()部分执行完毕。

有人说:既然异步这么好,那全部都用异步好了,同步存在还有什么意义?那么,同步适用于一些什么情况呢?我们可以想一下,同步是一步一步来操作,等待请求返回的数据,再执行下一步,那么一定会有一些情况,只有这一步执行完,拿到数据,通过获取到这一步的数据来执行下一步的操作。

我一开始用ajax时在想,自己写的一些函数为什么不执行呢?于是我把他放在ajax的上面仍然不执行,这可怎么办,于是就把函数全部放在了success的返回函数里面,发现函数执行了。但是把函数放在success里面代码总归是“丑的、乱的”,后来才知道ajax是默认的异步执行,ajax的数据还没请求回来,有些函数就已经执行完了。而我需要拿到请求回来的数据才能执行下一步,所以这个是异步没办法实现的,同步的存在还是有一定道理的。

版权声明:除特别注明外,本站所有文章均为澳门葡京官网原创

转载请注明:出处来自澳门葡京官网 » 【前端】ajax中的async属性值之同步和异步及同步和异步区别

发表评论

电子邮件地址不会被公开。 必填项已用*标注

  1. 笑八达说道:

    世间博客不少,风景这边独好!

    1. wp_tianshan说道:

      @笑八达 谢谢。 :smile: