React Ajax setInterval内存泄漏

时间:2016-10-26 13:26:01

标签: javascript jquery ajax reactjs memory-leaks

我在其他问题中查看并尝试了所有内容。仍然无法解决我的内存泄漏问题。这是代码。本质上,它从服务器获取JSON文件并相应地更新表。它每5秒循环一次AJAX调用。

此AJAX调用中发生内存泄漏。 任何帮助都会很棒。

LoadDataTable:function(){

 $.ajax({
  url: "***************************.json",
  dataType: 'json',
  cache: false,
  timeout: 5000,
  success: function(data) { 
   this.setState({temp1:data[2].field3}),
   this.setState({temp2:data[2].field5}),
   this.setState({temp3:data[2].field25}),
   this.setState({temp4:data[2].field26});

     if(data[2].field3 > 9 || data[2].field5 >9||data[2].field5>9 ||data[2].field26>9){
        document.location.href='#/'
   }
   else{
       //console.log("Stopped playing");
   }
   setTimeout(this.LoadDataTable, 5000);


}.bind(this),
  error: function(request, status, err) {

    //request.abort();
    console.log(request);
    setTimeout(this.LoadDataTable, 5000);

  }.bind(this),

 })

},
componentDidMount: function() {
    this.LoadDataTable();
    //this.setInterval(this.LoadDataTable, 100);// Call a method on the mixin
},

1 个答案:

答案 0 :(得分:0)

尝试将您的成功和错误函数移动到这样的命名函数:

$.ajax({
  url: "***************************.json",
  dataType: 'json',
  cache: false,
  timeout: 5000,
  success: this.successTimeout,
  error: this.errorTimeout,
})

componentDidMount: function() {
  this.LoadDataTable();
  //this.setInterval(this.LoadDataTable, 100);// Call a method on the mixin
},

successTimeout(data) { 
  this.setState({temp1:data[2].field3}),
  this.setState({temp2:data[2].field5}),
  this.setState({temp3:data[2].field25}),
  this.setState({temp4:data[2].field26});

  if(data[2].field3 > 9 || data[2].field5 >9||data[2].field5>9 ||data[2].field26>9){
     document.location.href='#/'
  }
  else{
    //console.log("Stopped playing");
  }

  setTimeout(this.LoadDataTable, 5000);
}.bind(this),

errorTimeout(request, status, err) {
  //request.abort();
  console.log(request);
  setTimeout(this.LoadDataTable, 5000);
}.bind(this)

另外,您可能想要考虑使用fetch API。请务必include the polyfill了解浏览器兼容性