有一个小的网页从Web服务器请求XML文件。 Web服务器每秒更新一次该文件,并在网页上显示新数据。重复的AJAX请求缓慢的浏览器
页面运行一段时间后,每当它从服务器获取新数据(每秒两次)时,它会减慢整个浏览器的速度。问题是间歇性的 - 有时会持续几秒钟,有时会持续更长时间。
这个问题存在于Firefox中。
function getData() {
var dataVal = parseFloat($("#data").html().substring(0, 100));
doSomethingWithVal(XTEval); // seemingly irrelevant, as it lags without this function too
}
t = 0.5;
function process_xml() {
var xmlhttp = GetXmlHttpObject();
if (xmlhttp === null) {
alert("Your browser does not support AJAX!");
return;
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState === 4) {
document.getElementById("data").innerHTML = xmlhttp.responseText;
getData();
setTimeout('process_xml()', t * 1000); // moved from end of function to here based on a suggestion
}
};
xmlhttp.open("GET", "data.shtml", true);
xmlhttp.send("");
}
function GetXmlHttpObject() {
if (window.XMLHttpRequest)
return new XMLHttpRequest();
if (window.ActiveXObject)
return new ActiveXObject("Microsoft.XMLHTTP");
return null;
}
data.shtml只包含:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!--#echo var="someVal.val" -->
或许有比使用AJAX不同/更好的办法?
在这个函数中用'var'声明你的“xmlhttp”变量是个好主意。没有这个,它是一个全局变量,并且连续调用“process_xml”并覆盖其先前的值。 – Pointy 2014-12-02 17:33:24
谢谢!我不知道这一点,而且我已经做出了改变。我继承了这些代码,并且一直在慢慢更新它。 – 2014-12-02 17:40:22
我说得对,getData不在你的代码中,getXTE不是从process_xml调用的吗?你可以证实这一点或修复你的例子(其中可能包括修复XTEVal和dataVal) – rene 2014-12-02 20:43:04