Javascript 当检查多个ajax请求完成时,我应该应用什么设计模式?

Javascript 当检查多个ajax请求完成时,我应该应用什么设计模式?,javascript,ajax,design-patterns,callback,Javascript,Ajax,Design Patterns,Callback,我在一个函数中有3个ajax调用和检查每个ajax完成标志的checkAjaxCompletion 下面的代码所做的是发送多个单独的ajax调用,interval方法检查完成标志以确定是继续还是保持interval。(我知道没有显示clearInterval,但重点是我想使用interval以外的东西) 目前的代码是: function manyAjax() { setInterval( function() { checkAjaxCompletion(); } , 200);

我在一个函数中有3个ajax调用和检查每个ajax完成标志的
checkAjaxCompletion

下面的代码所做的是发送多个单独的ajax调用,interval方法检查完成标志以确定是继续还是保持interval。(我知道没有显示clearInterval,但重点是我想使用interval以外的东西)

目前的代码是:

function manyAjax() {

   setInterval( function() { checkAjaxCompletion(); } , 200);

   ajax1(); 

   ajax2();

   ajax3();

}

function ajax1() {
   //send ajax request to server and if success set flag to 1. Default is 0. Error is 2.
}

function ajax2() {
   //send ajax request to server and if success set flag to 1. Default is 0. Error is 2.
}

function ajax3() {
   //send ajax request to server and if success set flag to 1. Default is 0. Error is 2.
}

function checkAjaxCompletion() {

   if(ajax1_flag == 1 && ajax2_flag == 1 && ajax3_flag == 1) {
       //everything went success, do some process
   }
   else if(ajax1_flag == 2 || ajax2_flag == 2 || ajax3_flag == 2) {
       //some ajax failed, do some process
   }
   else {
      //all ajax have not been completed so keep interval i.e. do nothing here
   }
}

但我对使用区间函数犹豫不决,因为经常调用它似乎是在浪费内存。一定有更好的办法。我在想,是否可以在这里应用观察家模式,但我想听听大家的意见。

如果您想这样称呼它,它是观察家通知程序-但是您的每个ajax调用在完成时都很可能会有javascript回调。为什么不在每个ajax调用结束时调用
checkAjaxCompletion()
,如果您还在等待其他人,则什么也不做呢?

如果您想调用它,它是observer notifier,但您的每个ajax调用在完成时都很可能会有一个javascript回调。为什么不在它们的末尾调用
checkAjaxCompletion()
,如果您还在等待其他人,则什么也不做呢?

达斯汀·迪亚兹在这方面做得很好

出版商:

var o = new Observer;
o.fire('here is my data');
认购人:

var fn = function() {
  // my callback stuff
};

o.subscribe(fn);
var fn = function() {
  // my callback stuff
};

o.subscribe(fn);
取消订阅:


达斯汀·迪亚兹在这方面做得很好

出版商:

var o = new Observer;
o.fire('here is my data');
认购人:

var fn = function() {
  // my callback stuff
};

o.subscribe(fn);
var fn = function() {
  // my callback stuff
};

o.subscribe(fn);
取消订阅:

也许您想检查表单中的inputvalue回调ajax; 你可以查看我的网站演示,希望对你有所帮助。

也许您想检查表单中的inputvalue回调ajax; 你可以查看我的网站演示,希望对你有所帮助。

好的,我的想法是创建自己的对象,它可以处理发送一系列请求,保存每个请求的历史记录,并对每个响应执行我将称之为“后处理”的操作,下面是一段可能非常狡猾的代码,希望能演示我的想法

var Ajax = function() {
    var request, callback, lst;

    if (window.XMLHttpRequest) {
        request = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        request = new ActiveXObject("Microsoft.XMLHTTP");
    }

    request.onreadystatechange = handleResponse;

    this.history = [{}];

    this.send = function(args) {
        for (var i = 0; i < args.length; i++) {
            if (args.url) {
                request.open(args.type || 'GET', args.url);
            }
            request.send(args.data || null);
            callback = args.callback;
            lst++;
        }
    }

    function handleResponse() {
        var response = {
            url: '',
            success: true,
            data: 'blah'
        };
        history.push(response);
        if (postProccess()) {
            callback();
        }

    }

    function postProcess() {
        if (this.history[lst].success) {
            return true;
        } else {
            return false;
        }
    }
}
var Ajax=function(){
var请求、回调、lst;
if(window.XMLHttpRequest){
请求=新的XMLHttpRequest();
}else if(window.ActiveXObject){
请求=新的ActiveXObject(“Microsoft.XMLHTTP”);
}
request.onreadystatechange=handleResponse;
this.history=[{}];
this.send=函数(args){
对于(变量i=0;i
好的,我的想法是创建自己的对象,它可以处理发送一系列请求,保存每个请求的历史记录,并对每个响应执行我将称之为“后处理”的操作,下面是一段可能非常狡猾的代码,希望能展示我的想法

var Ajax = function() {
    var request, callback, lst;

    if (window.XMLHttpRequest) {
        request = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        request = new ActiveXObject("Microsoft.XMLHTTP");
    }

    request.onreadystatechange = handleResponse;

    this.history = [{}];

    this.send = function(args) {
        for (var i = 0; i < args.length; i++) {
            if (args.url) {
                request.open(args.type || 'GET', args.url);
            }
            request.send(args.data || null);
            callback = args.callback;
            lst++;
        }
    }

    function handleResponse() {
        var response = {
            url: '',
            success: true,
            data: 'blah'
        };
        history.push(response);
        if (postProccess()) {
            callback();
        }

    }

    function postProcess() {
        if (this.history[lst].success) {
            return true;
        } else {
            return false;
        }
    }
}
var Ajax=function(){
var请求、回调、lst;
if(window.XMLHttpRequest){
请求=新的XMLHttpRequest();
}else if(window.ActiveXObject){
请求=新的ActiveXObject(“Microsoft.XMLHTTP”);
}
request.onreadystatechange=handleResponse;
this.history=[{}];
this.send=函数(args){
对于(变量i=0;i
我认为这是一条路。我认为这是一条路。