jquery的异步请求$.Deferred操作

今天记录下jq的异步请求操作,说来也是惭愧,最近才知道jq的异步请求操作(2011年就出来了),可能平时都是用的框架吧,里面都有,用jq用的少,主要是dom的操作,请求也就使用$.ajax。
给之前旧官网翻新时,从后台获取三个下拉框的值,获取后再进行搜索这个操作,直接上代码

var defer1 = $.Deferred();  //在这里定义
var getListOne = function(defer1){
	$.ajax({
		type: "get",
		url: "/api/xxxx",
		async: true,
		headers: {
			'Content-Type': 'application/json'
		},
		success: function(data) {
			defer1.resolve(data); // 成功返回
		},
		error: function(msg) {
			defer1.reject(msg); // 这里要reject出来,要不然不会触发$.when()的fail函数
			console.log(msg);
		}
	});
	return defer1.promise(); //返回promise
}

var defer2 = $.Deferred();
var getListTwo = function(defer2){
	$.ajax({
		type: "get",
		url: "/api/xxxx",
		async: true,
		headers: {
			'Content-Type': 'application/json'
		},
		success: function(data) {
			defer2.resolve(data);
		},
		error: function(msg) {
			console.log(msg);
		}
	});
	return defer2.promise();
}

下面是多个请求完成后进行的操作

// 多个请求完成后,再执行的方法
$.when(getListOne(defer1), getListTwo(defer2)).done(function(data1, data2){
	console.log("哈哈,成功了!"); 
	// 这里的data1、data2和请求when里的顺序对应,下面再进行你想要的的操作
	console.log(data1);
	console.log(data2);
}).fail(function(){ console.log("error"); });

单个请求完成后执行的方法

var getListThree = function(){
	$.ajax({
		type: "get",
		url: "/api/xxxx",
		async: true,
		headers: {
			'Content-Type': 'application/json'
		},
		success: function(data) {
			console.log(data);
		},
		error: function(msg) {
			console.log(msg);
		}
	}).done(function(){
		// what do you want to do next
		console.log("下一步要执行的方法");
	}).fail(function(){ console.log("error"); });
	
}

可能有人疑问,为什么不直接放到success函数里面去执行接下来的事,这样是更清晰,每个主体的功能,及接下来要做的事情是什么。


angularJS的$q.defer()

下面再小小的记录下angularJS的异步请求吧,就不再分开写了

下面是老版angularJS的$q.defer()的使用

function getList () {
	var deferred = $q.defer();  // 首先注册一个承诺先
	$http({
		method: 'POST',
		url: '/api/xxx',
		headers: { 'Content-Type': 'application/json; charset=utf-8'}
		data: $scope.sortImgList.length>0 ? $scope.sortImgList : deletaAllData
	}).success(function(json) {
		deferred.resolve(json);  // 记得把结果发出去
	}).catch(function(error) {
		console.log(error);
		deferred.reject(json);
	});
	return deferred.promise;  // 记得return出来
}

getList().then(function(data){
	console.log(data);  // 接下来想做的事
}).catch(function(json){
	console.log(json);
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值