2016-01-23 59 views
1

我现在有我的网页上Highcharts散点图具有以下结构:更新Highchart系列数据与格式化的AJAX返回

$(function() { 

    $('#container').highcharts({ 

      /*chart options, etc... this does not change*/ 

      series: [/*there is some default data here*/] 

     }); 
    }); 

这个图表的外观和伟大工程。另外,我在页面上有几个复选框和一个按钮。当按下按钮时,我有一些jQuery查看选中的复选框,并将这些信息发送到一个PHP文件,该文件基于选中的复选框返回一个NEW数据系列。该代码如下所示:

var Obj = {}; 
    $('button').click(function(e) { 
     var tableIDs = $("#boxes input:checkbox:checked").map(function() { 
      return $(this).val(); 
     }).get(); 
     var idClicked = e.target.id; 
     Obj.tables = tableIDs; 
     $.ajax({ 
      url: 'update.php', 
      type: 'post', 
      data: { 
       "points": JSON.stringify(Obj) 
      }, 
      success: function(data) { 
       console.log(data);  /*for testing*/ 
      } 
     }); 
    }); 

此代码位于脚本的最后,并且位于我的highcharts函数之外。我已经彻底测试了AJAX,并且一切正常。 PHP的设置方式,AJAX的回报是以下格式:

{name: 'series1', data: [[...,...],[...,...],...]}, 
{name: 'series2', data: [[...,...],[...,...],...]} 

不是一个数组,只是一个很长的字符串,有很多在它的数字(我把上面的两行清晰) 。换句话说,它的格式完全符合我的Highchart的'series:'选项。我的PHP返回的系列数量取决于检查哪个/多少个复选框。

所以,这里是我的问题:什么是用AJAX返回的新数据替换已经显示在我的高图上的默认数据的最佳方式?或者,默认数据是可选的,如果使这更容易,可以将其删除。

这里有很多类似的问题,但我似乎在为我的问题采取其他人的解决方案。我看了一些直接更新解决方案,如rockStarLeJared提出的那些解决方案,但我没有任何运气让他们将旧数据更新为新数据或插入任何数据。

我特别喜欢DemoUser提出的解决方案,基本上是将数据作为变量传递给包装好的highcharts函数。这里是什么,通常是这样的:

function my_chart(data) { 

    $('#container').highcharts({ 

     /*chart options, etc... this does not change*/ 

     series: [ /*there is some default data here*/ ] 

    }); 
} 

然而,当我做到这一点,它完全打破了我的图表,我一直无法得到这个工作,并通过适当的。

任何建议/意见将不胜感激。

+1

这部分新的数据尝试设置它:'不是一个数组,只是一个很长的字符串,有很多在it'数 - 是问题。你可以返回数组(JSON)吗?我的意思是,这是一个非常漂亮的字符串,但Highcharts需要一个对象来处理,而不是字符串:) –

回答

1

林做这种方式

var chart = $('#container').highcharts(); 

if (chart) { 
chart.series[0].setData([]); 
} 

这应该从图中清除数据。

我刚刚在我的代码中注意到,即时通信为新数据重新创建图表,但我不认为这是必要的。

一旦你再次使用

chart.series[0].setData([data]);