一种简化和限制并发ajax请求的方法与流程

文档序号:12120072阅读:2178来源:国知局

本发明涉及Web程序开发技术领域,尤其是一种简化和限制并发ajax请求的方法。



背景技术:

近几年随着前端技术的发展和程序的用户体现的重视,传统的B/S开发模式难以满足互联网的发展需求,开发者越来越多使用javascript来构建复杂的富用户体现的web程序,而javascript与服务器的交互最重要的方法是ajax,复杂的项目中经常遇到并发的ajax请求情况。

常规的ajax请求方式存在以下问题:

1.缺乏一种限制并发ajax请求的机制,往往需要开发者自行开发。

2.处理存在依赖关系的ajax请求,往往需要编写复杂且难以维护的嵌套回调方式来实现。



技术实现要素:

本发明解决的技术问题在于提供一种简化和限制并发ajax请求的方法;用于简化和限制并发的ajax请求,并能简单管理ajax依赖关系,能够限制并发ajax请求的数量以减轻服务器的压力。

本发明解决上述技术问题的技术方案是:

所述的方法是将并发的ajax请求转化成先进先出的队列形式,并且每个请求都设置唯一的id;一次从队列中取出n个ajax请求并执行,每个ajax请求执行完毕后执行队列中对应的方法;缓存当前的ajax请求的状态和数据;取出的n个ajax请求执行完毕后则继续取出执行n个ajax请求,直至所有的ajax请求执行完毕并执行总回调。

所述方法的具体流程如下:

第一步,将并发的ajax请求处理成队列的形式,并设置每次执行的请求数量n和等待时间t;

第二步,从队列头部取出n个ajax请求的参数,并遍历并做如下处理:

(1)、将请求的参数和默认参数合并,在传递给后端的参数中增加ajax-id参数并立刻发起一个ajax请求,并根据设定的ajax-id值缓存每个ajax请求的参数;

(2)、服务端处理ajax请求,并在返回的数据中增加从ajax请求获取的ajax-id;

(3)、无论success或error,ajax请求完成后执行回调;根据ajax-id从缓存中取出ajax请求的参数,若存在相应的回调则执行;同样根据ajax-id来缓存当前请求的状态和返回数据,检查取出ajax请求是否执行完毕;否则等待队列的其他请求再次触发回调检测,直至取出的ajax请求都执行完毕;

第三步,取出的ajax请求都执行完毕后重新取出,如设置有等待时间则等待设定的时间后重新取出;重复第二步直至ajax请求队列均完成执行并触发总回调,其中总回调可以访问所有ajax请求的执行状态和返回数据。

所述的ajax队列形式如下:

参数全貌如下:

本发明的ajax请求的底层采用jQuery库提供的ajax请求,单个的ajax请求的可用参数跟jQuery几乎一致,上面只列出几个常用的参数,更多的参数可以参考jQuery库的$.ajax方法。

本发明为开发者提供更加简单高效的ajax请求控制方式,开发者仅仅需要传入ajax参数队列和设置其他参数,所有的ajax请求便能有序地执行,对于存在依赖关系的ajax请求,仅仅需要合理调整他们在队列中的位置,在ajax参数队列中便能轻松处理,无需编写复杂的难以维护的嵌套回调。

附图说明

下面结合附图对本发明进一步说明:

图1是本发明详细流程。

具体实施方式

如图1所示,本发明现使用5个并发的ajax请求(其中队列中的第三个请求依赖于第一、二个请求)来详细阐述实施方式:

第一步,整理ajax请求队列和参数,参数如下:

使用上述参数config调用本发明封装的函数(兼容AMD、commonJS、var等引入方式,以最简单的var方式来说明)rbAjax(config)。

第二步,使用config调用内部_dequeue的方法,流程如下:

(1)使用config.queue.splice(0,config.limit)抽取队列前2个ajax请求的参数。

(2)遍历抽取的ajax参数,执行如下逻辑:传入的参数跟默认的参数合并得到最终参数缓存一份后去除非$.ajax使用的参数,在ajax传递给服务端的数据中增加ajax-id,也就是当前ajax的id值。检测当前ajax请求依赖的ajax请求是否成功执行:

如果检测到所依赖的任意ajax失败或错误,则直接设置当前ajax请求为失败状态并检测抽取的ajax是否均执行完毕;反之则发起ajax请求。

第三步,服务端响应ajax请求,需在返回的数据中增加一个从ajax请求中获取的ajax-id。

第四步,ajax处理服务端返回的数据,根据返回的ajax-id从缓存中取出当前ajax请求的参数,存在三种情况:

(1)设置依赖和处理函数:从队列处理状态对象中取出当前依赖的返回数据,将本次返回的数据和依赖的返回数据一起传给处理函数。

(2)只处理函数:将本次返回的数据传给处理函数。

(3)没有依赖和处理函数:不作任何处理。

无论ajax请求成功与否,均缓存当前请求的状态和返回数据,并检测取出的所有请求是否执行完毕,未完成则在下一次ajax请求中再次检测,直至取出的ajax请求均处理完毕,等待设定的时间,再次取出2个ajax请求:

window.setTimeout(function(){

_dequeue(config);

},config.wait*1000);

再次重复步骤二、三、四直至ajax请求队列中所有的队列处理完毕。第五步,设置了finish回调,则执行回调并传入所有请求的状态和数据:

if(config.queue.length==0&&config.finish){config.finish(json);}。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1