【发布时间】:2011-05-28 15:21:03
【问题描述】:
我的代码同时创建两个 ajax 调用(我假设并行性会更有效)。如果两个调用都成功,我想加载一个表。这样做的正确方法是什么?
【问题讨论】:
-
不过,将两个请求合二为一并在服务器端多线程运行它们(如果这样的话)应该会更有效。
标签: javascript ajax extjs
我的代码同时创建两个 ajax 调用(我假设并行性会更有效)。如果两个调用都成功,我想加载一个表。这样做的正确方法是什么?
【问题讨论】:
标签: javascript ajax extjs
var succeeded = {};
function callBackOne(){
succeeded.one = true;
// your other stuff
if (succeeded.two) { bothHaveSucceeded());
}
function callBackTwo(){
succeeded.two = true;
// your other stuff
if (succeeded.one) { bothHaveSucceeded());
}
【讨论】:
我个人会使用延迟任务:
var success = {
one: false,
two: false
};
// Task
var task = new Ext.util.DelayedTask(function(){
// Check for success
if (success.one && success.two) {
// Callback
doCallback();
} else {
task.delay(500);
}
});
task.delay(500);
// First
Ext.Ajax.request({
...
success: function() {
success.one = true;
}
...
});
// Second
Ext.Ajax.request({
...
success: function() {
success.two = true;
}
...
});
任务acts 就像一个线程,每 500 毫秒检查一次请求和sleep 的状态,直到它们都完成。
【讨论】:
老问题,但是,我偶然发现它......
我会使用 Caolan 出色的 async 库,尤其是在这里你会想要使用 async.parallel。
GitHub 文档上的示例值得一读。
【讨论】:
共享每个回调检查的整数变量:
// count variable
var numReturns = 0;
// same call back used for each Ajax request:
function callback() {
numReturns++;
if (numReturns === 2) {
progress();
}
}
如果您需要不同的回调,请让每个回调触发一个执行相同操作的事件。
【讨论】: