用jQuery的ajax做一个简单的例子,其他类型(如:axios)同理,看代码
异步方式:
$(function() {
$.ajax({
type : 'post',
async : true,
url : '',
cache : false,
data : {},
success : function(data){
alert("1111");
}
});
alert("22222");
});
// 结果肯定是先22222后111111
同步方式:
$(function() {
$.ajax({
type : 'post',
async : false,
url : '',
cache : false,
data : {},
success : function(data){
alert("1111");
}
});
alert("22222");
});
// 结果肯定是先11111后22222
简单理解的话就是:
正常情况下,ajax默认是异步的(除非强制将async设置为 false),success是回调函数,只有等主体函数全部执行完,才会执行success里面的函数;如果async == false,那代码将按照顺序从上到下依次执行。
异步:
在异步模式下,当我们使用AJAX发送完请求后,可能还有代码需要执行。这个时候可能由于种种原因导致服务器还没有响应我们的请求,但是因为我们采用了异步执行方式,所有包含AJAX请求代码的函数中的剩余代码将继续执行。如果我们是将请求结果交由另外一个JS函数去处理的,那么,这个时候就好比两条线程同时执行一样。
同步:
在同步模式下,当我们使用AJAX发送完请求后,后续还有代码需要执行,我们同样将服务器响应交由另一个JS函数去处理,但是这时的代码执行情况是:在服务器没有响应或者处理响应结果的JS函数还没有处理完成return时,包含请求代码的函数的剩余代码是不能够执行的。就好比单线程一样,请求发出后就进入阻塞状态,知道接触阻塞余下的代码才会继续执行。