Javascript 当检查多个ajax请求完成时,我应该应用什么设计模式?
我在一个函数中有3个ajax调用和检查每个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);
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
我认为这是一条路。我认为这是一条路。