Extjs:两个并行的ajax调用

时间:2010-12-21 04:57:05

标签: javascript ajax extjs

我的代码同时创建两个ajax调用(我假设并行性会更高效)。如果两个调用都成功,我想加载一个表。这样做的正确方法是什么?

4 个答案:

答案 0 :(得分:5)

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());
}

答案 1 :(得分:1)

我个人使用延迟任务:

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检查一次,直到它们都完成。

答案 2 :(得分:1)

老问题,但好吧,我偶然发现它......

我使用了Caolan出色的 async 库,特别是在这里你要使用 async.parallel

GitHub文档中的示例值得一读。

https://github.com/caolan/async#parallel

答案 3 :(得分:0)

共享每个回调检查的整数变量:

// count variable
var numReturns = 0;

// same call back used for each Ajax request:
function callback() {
    numReturns++;
    if (numReturns === 2) {
        progress();
    }
}

如果您需要不同的回调,请让每个回调触发一个同样的事件。