Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 每x秒有多个XmlHttpRequests_Javascript_Xmlhttprequest_Settimeout_Setinterval - Fatal编程技术网

Javascript 每x秒有多个XmlHttpRequests

Javascript 每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

我需要一些关于我正在写的代码的帮助。。 我的代码触发三个非同步请求并更新我页面上的某些内容。 我希望这些请求每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.33


另外,我当前的代码是这样编写的:在使用回调函数接收到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如何简化此过程?只在第一个请求中添加一个计数器,并将其他计数器嵌入到函数中?