dojo两个xhr请求和回调函数仅在两者都完成时触发

时间:2012-07-04 14:04:29

标签: javascript dojo xmlhttprequest

有没有办法像这样处理多个xhr请求?对于一个xhr,有一个函数内置但多个请求?

3 个答案:

答案 0 :(得分:6)

dojo.xhr返回dojo.Deferred,Deferred是回调等的包装器。因此,您的案例中的关键功能是dojo.xhr({parameters})。 then(callbackFunction)

虽然我们经常希望通过简单的民意调查和计数器快捷方式实现并行XHR,但Dojo也有这个,就像Craig通知DeferredList一样;

你将发射两次XHR,每次调用返回一个处理程序,引用它们。创建一个列表,将这些引用作为参数,在数组中收集。然后作为最后的触摸,在列表上添加“然后”调用,

var dXhr1 = dojo.xhrGet({ url: ... });
var dXhr2 = dojo.xhrGet({ url: ... });
var dList = new dojo.DeferredList([dXhr1, dXhr2]);
dList.then(function(arrayOfValues) { 
    var res = "Result: succes?+"arrayOfValues[0][0].toString()+":"+arrayOfValues[0][1]+", "+
    succes?+"arrayOfValues[1][0].toString()+":"+arrayOfValues[1][1]+";
console.log(res);
});

或链式

new dojo.DeferredList([
     dojo.xhrGet({ url: ... }),
     dojo.xhrGet({ url: ... })
]).then(function(res) { console.log(res); });

答案 1 :(得分:4)

答案 2 :(得分:1)

难道你不能用内部计数器发出一个命中功能的回调吗?当该计数器达到2时,两个回调都已完成?