在我问这里之前,我已经在寻找问题了,但是我仍然找不到答案,这可能是我的错误或其他我做错的事情。
问题是我想向XMLHttpRequest
服务器发出一个localhost
请求,但是在请求完成后,我想对相同的目标/ URL发出相同的XMLHttpRequest
请求示例如下action/g
req.repeat = function(rnd = null) {
if(rnd == null) {
rnd = getrandint();
}
var data;
data = new FormData();
data.append('data', 'hay');
if(isset(xhr[rnd]) && xhr[rnd] == window.XMLHttpRequest) {
xhr[rnd].abort();
}
xhr[rnd] = new XMLHttpRequest();
xhr[rnd].open('POST', url+'action/g', true);
xhr[rnd].onreadystatechange = function() {
if(this.readyState == 4) {
req.repeat(rnd);
}
}
xhr[rnd].send(data);
}
我认为代码运行良好,但是如果XMLHttpRequest
请求仅花费10毫秒即可从服务器获得响应,则该功能将每10毫秒快速重复一次。
在再次执行setTimeout()
之前,我尝试使用req.repeat()
处理此问题,但是我想那不是正确的方法。原因是,如果XMLHttpRequest
请求花费了3000毫秒,而我将setTimeout()
加了1000毫秒,那么XMLHttpRequest
只会每隔4000毫秒重复一次,这对我来说很慢。
如果XMLHttpRequest
请求花费1200ms来从服务器获取响应,而我希望重复执行的时间大于1000ms,我想在1000ms处不断进行重复。
但是,即使使用setInterval()
,我也找不到办法。
有关信息
var xhr = new Array();
位于函数外部。
请帮助,我对您的任何建议
答案 0 :(得分:0)
我已经找到了自己的问题的答案,而无需使用任何websocket,在这里是代码。
req.repeat = function(code = 0) {
var time;
var code, parent;
time = new Array();
while(code == 0) {
code = getrandint();
}
return {
execute: function(par, url, fun) {
var data, lim;
lim = 1500; // in miliseconds
data = new FormData();
data.append('data', par);
if(xhr[code] == window.XMLHttpRequest) {
xhr[code].abort();
}
xhr[code] = new XMLHttpRequest();
xhr[code].open('POST', meurl+'url', true);
xhr[code].onreadystatechange = function() {
if(xhr[code].readyState == 4) {
time['last'] = new Date();
time['diff'] = time['last'].getTime()-time['begin'].getTime();
if(isfun(fun)) {
fun(xhr[code]);
}
parent = new req.repeat(code);
if(time['diff'] > lim) {
parent.execute(par, url, fun);
} else {
tim = setTimeout(function() {
parent.execute(par, url, fun);
}, lim-time['diff']);
}
}
}
time['begin'] = new Date();
xhr[code].send(data);
}
}
}
谢谢您的帮助,但是当我阅读websocket可以更好地完成这项工作时,但是我仍然在学习websocket解决方案。