点击按钮,在发出请求前页面有个loading效果,即显示一张“正在加载”的gif图片。
js是单线程的,执行同步ajax的时候会导致线程阻塞,不能加载loading图片。所以不能使用同步请求。
所有的同步都是可以使用异步替代的。但是怎么替代改动代码最少或者改动不大呢?
我使用下面的方式:$.when().done();
$.Deferred();
1、主线程代码
$('.btn').click(function() {$('.loadingicon').show();$.when(getData()).done(function(data) {$('.loadingicon').hide();alert(data);});});
2、被调用ajax函数
function getData() {var defer = $.Deferred();$.ajax({url : '',async : true, // true异步。false同步success : function(data) {defer.resolve(data)}});return defer.promise();}