连续调用XMLHttpRequest

时间:2014-04-16 14:17:52

标签: javascript timer xmlhttprequest

目前我正在以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;
        } 
    }

1 个答案:

答案 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();