Javascript 每x秒有多个XmlHttpRequests
我需要一些关于我正在写的代码的帮助。。 我的代码触发三个非同步请求并更新我页面上的某些内容。 我希望这些请求每X秒触发一次。。 我已经看到了一些类似的问题,关于setTimeout或setInterval,但问题是我需要每x秒触发一次请求。而我唯一能想到的setInterval/setTimeout不会为每个调用计算单独的时间,而是一次。。 比如说 如果我在00.00.01有xhr1,在00.00.02有xhr2,在00.00.03有xhr3 每次通话20秒后打下一个电话最好是什么方式 xhr1 00.00.21 xhr2 00.00.22 xhr3 00.00.23 xhr1 00.00.41 xhr2 00.00.32 xhr3 00.00.33Javascript 每x秒有多个XmlHttpRequests,javascript,xmlhttprequest,settimeout,setinterval,Javascript,Xmlhttprequest,Settimeout,Setinterval,我需要一些关于我正在写的代码的帮助。。 我的代码触发三个非同步请求并更新我页面上的某些内容。 我希望这些请求每X秒触发一次。。 我已经看到了一些类似的问题,关于setTimeout或setInterval,但问题是我需要每x秒触发一次请求。而我唯一能想到的setInterval/setTimeout不会为每个调用计算单独的时间,而是一次。。 比如说 如果我在00.00.01有xhr1,在00.00.02有xhr2,在00.00.03有xhr3 每次通话20秒后打下一个电话最好是什么方式 xhr1
另外,我当前的代码是这样编写的:在使用回调函数接收到previous的响应之后,每个xhr都会被激发
function request(url, callback){
....
asychronous request
....
callback(responseText);
}
request(url1, function(){
some code
}
request(url2, function(){
some code
}
request(url3, function(){
some code
}
如果对这三个调用建议另一种方法,我想知道..因为这是一个复杂的场景,我建议您研究一下。这不是一个简单的概念,但它将允许您在链接需求和回调之间保持清晰的关注点分离 如果没有承诺,您将需要在回调中包含下一个xhr调用 承诺包含在jQuery或Dojo等JavaScript库中 一个更简单的场景是忘记链接请求:
function allRequests(){
request(url1, function(){some code});
// url2 one second later
setTimeout(function(){request(url2, function(){some code});},1000);
// url3 one more second later
setTimeout(function(){request(url3, function(){some code});},2000);
}
// run the 3 requests every 20 seconds
setInterval(allRequests(),20000);
由于这是一个复杂的场景,我建议您仔细研究。这不是一个简单的概念,但它将允许您在链接需求和回调之间保持清晰的关注点分离 如果没有承诺,您将需要在回调中包含下一个xhr调用 承诺包含在jQuery或Dojo等JavaScript库中 一个更简单的场景是忘记链接请求:
function allRequests(){
request(url1, function(){some code});
// url2 one second later
setTimeout(function(){request(url2, function(){some code});},1000);
// url3 one more second later
setTimeout(function(){request(url3, function(){some code});},2000);
}
// run the 3 requests every 20 seconds
setInterval(allRequests(),20000);
有些选择是:
同时执行所有三个请求。这三个请求不能同时完成有什么原因吗
setInterval( allRequests, 20000 );
function allRequests() {
requestOne();
requestTwo();
requestThree();
}
或者使用前一个请求的成功功能链接您的请求
setTimeout( requestOne, 5000 );
function requestOne() {
// do request blah blah
setTimeout( requestTwo, 5000 );
}
function requestTwo() {
// do request blah blah
setTimeout( requestOne, 5000 ); // loops back to first request
}
或者在开始时将请求与超时错开
setInterval( requestOne, 20000 ); // set first interval to start now
setTimeout( function() {
setInterval( requestTwo, 20000 ); // set second interval to start one second from now
}, 1000 );
setTimeout( function() {
setInterval( requestThree, 20000 ); // set third interval to start two seconds from now
}, 2000 );
有些选择是:
同时执行所有三个请求。这三个请求不能同时完成有什么原因吗
setInterval( allRequests, 20000 );
function allRequests() {
requestOne();
requestTwo();
requestThree();
}
或者使用前一个请求的成功功能链接您的请求
setTimeout( requestOne, 5000 );
function requestOne() {
// do request blah blah
setTimeout( requestTwo, 5000 );
}
function requestTwo() {
// do request blah blah
setTimeout( requestOne, 5000 ); // loops back to first request
}
或者在开始时将请求与超时错开
setInterval( requestOne, 20000 ); // set first interval to start now
setTimeout( function() {
setInterval( requestTwo, 20000 ); // set second interval to start one second from now
}, 1000 );
setTimeout( function() {
setInterval( requestThree, 20000 ); // set third interval to start two seconds from now
}, 2000 );
“我当前的代码是这样编写的,每个xhr都是在收到上一个的响应后触发的”:您能否澄清一下,您是想保留还是更改此行为?只要此行为被视为良好实践,我愿意保留它,但在特定时间后再次触发每个请求也很重要。ajax请求到底在做什么。是将html加载到div中,还是在返回后会进行一些处理?每个xhr都会获取不同网页的html内容,我使用内部html从每个网页提取特定内容。“我当前的代码是这样编写的,即每个xhr都会在收到前一个页面的响应后触发”:您能否澄清您是想保留还是更改此行为?只要此行为被视为良好实践,我会保留它,但在特定时间后再次触发每个请求也很重要。ajax请求到底在做什么。是将html加载到div中,还是在返回后会进行一些处理?每个xhr都会获取不同网页的html内容,我使用内部html从每个网页提取特定内容。您建议Christophe如何简化此过程?只在第一个请求中添加一个计数器,并将其他计数器嵌入到函数中?您建议Christophe如何简化此过程?只在第一个请求中添加一个计数器,并将其他计数器嵌入到函数中?