点击按钮,在发出请求前页面有个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);
		}
	});
}

 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐