目前我正在以setInterval为基础调用函数。
此函数向我的服务器发出XMLHttpRequest以获取更新信息。如果有可用的更新,我更新图像(使用canvas元素)。
这是做这种事情的最佳方法吗?
我的代码:
致电代码:
function StartFeedUp() {
if (tmrStartFeedUp) window.clearInterval(tmrStartFeedUp);
tmrStartFeedUp = setInterval(GetNextImage, 330);
}
我叫做的功能:
var isProcess = false;
function GetNextImage() {
try {
if (!isProcess) {
isProcess = true;
var urlTS = '/Cloud/isNewFrames.ashx?alias=' + alias + '&version=' + version + '&guidlogon=' + guidlogon;
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", urlTS, true);
xmlhttp.timeout = 200;
xmlhttp.send();
var nextts = xmlhttp.responseText;
}
isProcess = false;
}
catch (err) {
isProcess = false;
document.getElementById("divMode2").innerHTML = err;
}
}
答案 0 :(得分:1)
除了重复XHR调用之外,您还可以使用HTML5 Web Sockets来保持与服务器的连接,从而服务器可以在需要时推送数据。 Web套接字相对较新,旧浏览器不支持。
您的XHR是异步的,因此您应该在onreadystatechange
事件上进行聆听,而不是始终期望在send()
电话后直接提供响应:
xmlhttp.open("GET", urlTS, true);
xmlhttp.timeout = 200;
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
console.log("received " + xmlhttp.responseText);
}
}
xmlhttp.send();