【发布时间】:2012-03-01 08:47:29
【问题描述】:
我有一个异步 Ajax 函数,它在服务器端运行命令字符串并将结果返回给客户端。它调用回调来处理结果。
function ajaxCall(commandStr,callback){
var url=......//make a url with the command string
jquery.get(url,function(result){
//process the result using callback
callback(result);
});
}
异步调用 (ajaxCall) 可能需要一段时间才能完成,但我希望它在间隔 (1000 毫秒) 后执行相同的命令。
我想写一个这样的函数:
function ajaxCallRepeated(interval,commandStr,callback)
我试过这样的闭包:
function ajaxCallRepeated(interval,commandStr,callback){
//This feature uses closures in Javascript. Please read this to know why and how: http://jibbering.com/faq/notes/closures/#clSto
function callLater(param1,param2,param3){
return (function(){
ajaxCall(param2,function(out,err){
if(param3)param3(out,err);
var functRef = callLater(param1,param2,param3);
setTimeout(functRef, interval);
});
});
}
//the first call
var functRef = callLater(interval,commandStr,callback);
setTimeout(functRef, interval);
}
那我这样称呼它:
ajaxCallRepeated(2000,"ls",function(result){
alert(result);
});
但它只运行命令 2 次。 如何编写一个在作为异步函数的回调调用后重新调度自身的函数?
PS。我想在前一个 Ajax 调用完成后触发另一个 Ajax 调用。另外,值得一提的是,axashCallRepeated()会被各种参数调用,所以几个Ajax调用是并行运行的,但是对于每个commandStr,只有一个Ajax调用在进行,Ajax调用返回后,另一个Ajax调用会X 秒后触发。
【问题讨论】:
-
让我直说。您想用回调安排新的 ajax 调用每隔 X 秒触发一次,不管之前的 ajax 调用可能尚未完成,或者您想按顺序触发 ajax 调用(触发另一个上一个完成后)?
-
我想在前一个 Ajax 调用完成后触发另一个 Ajax 调用。另外,值得一提的是,axashCallRepeated()会被各种参数调用,所以几个Ajax调用是并行运行的,但是对于每个commandStr,只有一个Ajax调用在进行,Ajax调用返回后,另一个Ajax调用会X 秒后被解雇。
-
我会在第一个 Ajax 调用完成时触发一个自定义事件,然后执行第二个!
标签: javascript jquery ajax