俗话说不做死就不会死,今天做死了一回,写了一个比较二逼的函数,遇到了同步Ajax引发的UI线程阻塞问题,在此记录一下。
事情原由是这样的,由于页面上有多个类似的异步请求动做,本着提升代码可重用性的原则,我封装了一个名为getData的函数,它接收不一样参数,只负责获取数据,而后把数据return。基本的逻辑剥离出来是这样的:php
代码以下
复制代码
function getData1(){ var result;
$.ajax({
url : 'p.php',
async : false,
success: function(data){
result = data;
}
}); return result;
}
这里的ajax不能用异步的,不然函数返回时,result还未赋值,会出错。因此我加了async:false。看起来好像没什么问题。我调用这个函数能够正常的获得数据。html
代码以下
复制代码
$('.btn1').click(function(){ var data = getData1();
alert(data);
});
接下来,要加另一个功能,因为ajax请求有必定的耗时,因此我须要在发出请求前页面有个loading效果,即显示一张“正在加载”的gif图片,想必你们也都见过。因此个人处理函数就变成了这样:ajax
代码以下