使用格式化AJAX更新Highchart系列数据返回

时间:2016-01-23 02:24:59

标签: javascript php jquery ajax highcharts

我目前在我的页面上有一个Highcharts散点图,它具有以下结构:

  $(function() {

    $('#container').highcharts({

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

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

      });
  });

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

    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 个答案:

答案 0 :(得分:1)

我这样做

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

这应该清除图表中的数据。

我刚刚在我的代码中注意到我从头开始为新数据重新创建图表,但我不认为这是必要的。

获得新数据后,请尝试使用

重新设置
Public Function KleanUp(r As Range) As String
   Dim inpt As String, outpt As String
   Dim L As Long, i As Long, CH As String
   Dim Pulling As Boolean

   inpt = Trim(r.Text)
   L = Len(inpt)
   outpt = ""
   Pulling = True

   For i = 1 To L
      CH = Mid(inpt, i, 1)
      If CH = "(" Then
         outpt = outpt & CH
         Pulling = False
      Else
         If CH = ")" Then
            Pulling = True
         Else
            If Pulling Then
               outpt = outpt & CH
            End If
         End If
      End If
   Next i

   If Left(outpt, 1) = "(" Then outpt = Mid(outpt, 2)
   If Right(outpt, 1) = "(" Then outpt = Mid(outpt, 1, Len(outpt) - 1)
   ary = Split(outpt, "(")
   For i = LBound(ary) To UBound(ary)
      ary(i) = "(" & ary(i) & ")"
   Next i

   KleanUp = Join(ary, " ")
End Function