我正在使用javascript进行内存泄漏。以下代码从数据库获取数据并返回文本框中的值。此数据每秒循环一次并产生内存泄漏。使用开发人员工具,可以看到xmlHTTP请求在浏览器上构建。有没有办法解决这个错误?
//the following code gets data from the database
var startVal = 1; //the start value
var stopVal = 451; //the stop value
var presentVal = startVal;
var int = self.setInterval(function () {
getData(presentVal)
}, 1000); //clock cycles every second
function getData(str) //used to get data from the database by calling getdata.php file
{
var xmlhttp;
if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else { // code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
{
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var response = xmlhttp.responseText;
var data = response.split("<>");
var temperature = "";
temperature = data[1];
document.getElementById("temperatureVal").value = temperature; ///Temperature Value
if (presentVal < stopVal) {
presentVal++;
response = "";
} else {
//int=window.clearInterval(int); //stop timer
presentVal = startVal; //start Over
response = "";
}
}
}
xmlhttp.open("GET", "http://localhost/getData.php?index=" + str, true); //calls the getdata.php file
xmlhttp.send();
}
}
答案 0 :(得分:0)
在getData
开始时,您正在创建一个新变量xmlhttp
,每次调用getData
时,都会创建一个新的完全独立的变量。要解决您的问题,请重复使用相同的xmlhttp
变量,而不是创建新变量(在更高的函数范围内使用window.xmlhttp
或定义var xmlhttp
)。 (我之前说你可以删除对象以清除内存,但这显然不起作用。)
在getData之外只调用一次new XMLHttpRequest()
,你就可以了。