【发布时间】:2014-12-02 17:28:43
【问题描述】:
有一个从 Web 服务器请求 XML 文件的小网页。 Web 服务器每秒两次更新此文件,以在网页上显示新数据。
页面运行一段时间后,每当它从服务器获取新数据时(每秒两次),它都会减慢整个浏览器的速度。问题是间歇性的 - 有时会持续几秒钟,有时会持续更长时间。
问题存在于 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”的连续调用会覆盖其先前的值。 -
谢谢!我不知道,我已经做出了改变。我继承了这段代码,并一直在慢慢更新它。
-
getData 不在您的代码中并且未从 process_xml 调用 getXTE 对吗?您能否确认这一点或修复您的示例(可能包括修复 XTEVal 和 dataVal)
-
@rene 感谢您的关注。在我的实际代码中,调用 getXTE 而不是 getData。我正在简化 SO 的代码,却忘记将 getXTE 函数更改为 getData。
-
在 php 中同时调用 ajax 的会话锁是一个已知问题,不确定它是否与 SSI 相同。
标签: javascript jquery ajax ssi