[英]multiple simultaneous ajax requests broker
如何协调同时进行的ajax调用并仅在全部完成后才采取措施?
是否有一个方便的javascript帮助程序库,该库将协调对数据库的多个同时ajax调用,并在所有ajax数据提取均返回其数据时调用指定的回调? 我想向我的“协调员”或“经纪人”提交准备好的随时可用的ajax调用的字典,以及我的WhenAllCompleted回调函数。
用例很常见:在将数据库记录绑定到UI之前,必须填充所有外键数据关系的下拉列表,以便用户看到有意义的值,而不是通常的整数键。存储在记录中。
如果已经有了一个健壮的标准库,我宁愿不重新发明所有的管道代码来跟踪每个ajax请求的状态。
编辑:这是描述我想要做什么的伪代码:
when ajax1fetch is finished
and
ajax2fetch is finished
and
ajax3fetch is finished
and SELECT1 is populated
and SELECT2 is populated
and SELECT3 is populated
bindRecordToUI()
在将代码重组为使用$.when()
,我要在.ajax()成功回调中获取数据,然后在该回调中填充SELECT。 当填充SELECT时,我将记录绑定到UI。
如果我们提供$.when
ajax调用列表,则在ajax请求完成时调用完成的回调,该完成发生在 SELECT填充之前 (如果SELECT的项目列表很长)。
我不知何故需要将SELECT元素的填充作为附加的when-conditions,并找到一种方法,以将ajax调用返回的数据路由到填充函数(如果SELECT-populate函数不会在peform中执行)。 ajax成功回调。
由于您已经在使用jQuery,因此可以使用jQuery.when()
方法等待多个Deferred
结束。 需要注意的是jQuery.ajax()
及其包装方法,像jQuery.get()
返回一个jqXHR
对象,它是一个类型的Deferred
。
您将从$.ajax
或等效调用中获取Deferred
,然后将它们全部传递给$.when
。 您将获得一个Promise
,它基本上是一个只读的Deferred
*。 然后,您可以在此Promise
附加完成/错误处理程序,一旦所有传入的Deferred
都被解析,则将被解决;如果任何Deferred
被拒绝,则被拒绝。
var def1 = $.ajax(),
def2 = $.ajax({ /* some params */});
var masterPromise = $.when(def1, def2);
masterPromise.done(function() {
console.log('def1 and def2 are done!');
});
Deferred
允许附加各种完成和错误处理程序,以及解决和取消以及控制异步操作的方法。 Promise
仅允许附加处理程序,并且不允许控制异步操作。 您可以使用Deferred.promise()
方法从jQuery Deferred
获得Promise
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.