1

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

    }
  }

4

1 に答える 1

0

最初にgetData、新しい変数を作成しています。これにより、呼び出されるxmlhttpたびに、まったく別の新しい変数が作成されます。getData問題を解決するxmlhttpには、新しい変数を作成する代わりに、同じ変数を再利用します (より高い関数スコープで使用window.xmlhttpまたは定義します)。var xmlhttp(以前、オブジェクトを削除してメモリをクリアできると言いましたが、これは明らかに機能しません。)

new XMLHttpRequest()getData の外で 1 回呼び出すだけで問題ありません。

于 2013-03-07T20:44:40.293 に答える