请帮助Javascript内存每秒泄漏循环数据

时间:2013-03-07 20:02:43

标签: javascript ajax

我正在使用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();

    }
  }

1 个答案:

答案 0 :(得分:0)

getData开始时,您正在创建一个新变量xmlhttp,每次调用getData时,都会创建一个新的完全独立的变量。要解决您的问题,请重复使用相同的xmlhttp变量,而不是创建新变量(在更高的函数范围内使用window.xmlhttp或定义var xmlhttp)。 (我之前说你可以删除对象以清除内存,但这显然不起作用。)

在getData之外只调用一次new XMLHttpRequest(),你就可以了。