- 时间:2022-06-29 00:39 编辑: 来源: 阅读:301
- 扫一扫,手机访问
摘要:用代码详细分析AJAX同步和异步
[网站代码]
1.什么是同步请求:(错)同步请求是指当前请求发出后,浏览器什么都不能做,后续代码只有在请求完成并返回数据后才会执行,相当于排队。上一个人能做完自己的事,下一个人才能做。 也就是说,当JS代码加载到当前AJAX中时,页面中的所有代码都将暂停加载,页面处于假死状态。当这个ajax完成后,其余的代码页将继续运行以释放暂停的动画状态(也就是说,在AJAX返回数据后,将执行下面的函数2)。 Sync:提交请求-->:等待服务器解析-->:在解决方案完成返回的这段时间内,客户端浏览器什么都不能做。异步:请求由事件触发-->:服务器解决方案(这是浏览器还能做的其余部分)->:同步完成后,需要等待返回结果才能继续,但不需要等待异步。通常,您需要监控异步结果。 2.什么是异步请求:(真)异步请求就是请求发出的时候,浏览器可以继续做任何事情。Ajax发送请求不会影响页面的加载和客户的操作,相当于在两条线上,各行其是,互不影响。 通常,默认值是真正的异步。 异步请求根本影响不了客户的体验效果。无论请求是长是短,客户都会专注于页面的其余部分,不会觉得自己在等待。 简单来说,同步是一条直线上的队列,而异步在队列中不会自行其是。 Ajax和异步之间有什么区别?当我们使用ajax时,我们通常使用异步解决方案。 异步解决方案:我们通过事件触发ajax,请求服务器。在此期间,无论服务器是否响应,客户端上的其余代码都可以运行。 同步解决:我们通过实践触发ajax,请求服务器,在此期间等待服务器解决请求。在此期间,客户不能做任何事情。 当ajax完成时,剩下的代码将被执行。 对于jquery的async:false,该属性默认为true: asynchronous,false: synchronous。 比如,同步就是你约我去吃饭,我听到就和你去吃饭;你没听到就一直叫,直到我告诉你你听到了,然后我们一起去吃饭。 异步就是你给我打电话,然后自己去吃饭。我可能得到消息后马上就走,也可能等到忙完再去吃饭。 AJAX可以分为同步(async = false)和异步(async = true) $。Ajax ({type: "post ",URL: "path ",cache: false,async: false,datatype: ($。browser.msie)?" text" : "xml ",成功:function(xmlobj){ function 1(){ };} });function 2(){ };默认情况下,async为true。同步和异步有什么区别:异步:在异步模式下,我们用AJAX发送请求后,可能还有代码要执行。 此时服务器可能会因为各种原因不响应我们的请求,但是因为我们采用了异步执行模式,所以所有包含AJAX请求代码的函数中剩余的代码都会继续执行。 如果我们把请求结果留给另一个JS函数去解决,那么这个时候就像两个线程同时执行。 同步:在同步模式下,我们使用AJAX发送请求后,仍然有代码要执行,我们也把服务器响应交给另一个JS函数来解决。但此时的代码执行情况是:当服务器没有响应或者求解响应结果的JS函数还没有求解返回时,包含请求代码的函数剩余代码无法执行。 就像单线程一样,请求发出后,会进入阻塞状态,剩下的代码会继续执行,直到触点阻塞。 看看下面的代码:var flag = truevar指数= 0;$.ajax({url:" ",success:function(data){ flag = false;}});while(flag){ index++;}alert(索引);最后,程序进入了无限循环。看看下面的代码:var flag = true$.ajax({url:" ",success:function(data){ flag = false;}});警报(标志);最终的结果是truejs是单线程的,因为执行ajax请求会花费一定的时间,甚至出现网络故障,返回结果延迟;这时候如果是同步执行,就需要等到ajax返回结果后再执行下一段代码。如果ajax请求需要1分钟,程序必须等待1分钟。 如果是异步执行,前端在等待服务器端返回的过程中会继续执行ajax块后面的脚本,直到服务器端返回一个正常的结果才会执行成功。此时执行两个线程,一个线程在ajax块的请求和ajax块后面的脚本var flag=true之后;var指数= 0;$.ajax({url:" ",async:false,success:function(data){ flag = false;}});while(flag){ index++;}alert(索引);最终结果是0。