ajax同步导致浏览器假死
点击按钮,在发出请求前页面有个loading效果,即显示一张“正在加载”的gif图片。js是单线程的,执行同步ajax的时候会导致线程阻塞,不能加载loading图片。所以不能使用同步请求。所有的同步都是可以使用异步替代的。但是怎么替代改动代码最少或者改动不大呢?我使用下面的方式:$.when().done();$.Deferred();1、主线程代码$('.btn').click(functio
·
点击按钮,在发出请求前页面有个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();
}
二、when带参数传递给done
$.when(getDatas(),$.Deferred().resolve(param1),$.Deferred().resolve(param2)).done(function(data,param1,param2) {
console.log(data)
console.log(param1)
console.log(param2)
});
function getDatas(){
$.ajax({
url : 'xx.php',
success : function(data) {
$.Deferred().resolve(data);
}
});
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)