工作中有时间碰到多个ajax请求,需要按照顺序进行数据请求且保证数据是按照请求的顺序有序返回。所以需要对请求进行包装处理。 jquery自带的case when方式仅能保证请求是按顺序发出的,但不能保证请求的数据按顺序返回。
具体处理方式如下:
1、创建一个存放ajax请求的数组,
2、创建一个执行ajax请求的函数,在函数内执行数组中第一个ajax函数,在请求返回后将该ajax函数删除,然后判断数组的长度,若数组长度大于零,表示还有请求没有完成,继续执行该ajax函数。实际上是利用递归原理来处理。
例:
var categorieList = [ { categorieId: 1, id: 11151, //测试用 type: "技术" },{ categorieId: 2, id: 11164, //测试用 type: "能力" },{ categorieId: 3, id: 11146, //测试用 type: "产品" } ]; if( typeof(result.label) != "undefined" && !isBlank(result.label) ){ var ajaxes = []; //用于存储参数对象的队列 for(var i=0; i< categorieList.length; i++){ ajaxes.push( {categorieId: categorieList[i].categorieId, type: categorieList[i].type, result: result } ); }
创建执行ajax请求的函数:
var executeAjax = function(){ if(ajaxes.length < 1){ return; } var params = ajaxes[0]; $.ajax({ type: ..... success: function(response){ ... //删除队列中的第一个请求 ajaxes.shift(); //如果队列中还有请求,就接着递归执行executeAjax函数,直到队列为空 if( ajaxes.length > 0){ executeAjax(); } } }); }; executeAjax(); //执行函数请求。