Asynchronous 异步向现有HighStock图表添加历史记录

Asynchronous 异步向现有HighStock图表添加历史记录,asynchronous,highstock,Asynchronous,Highstock,我正在编写一个网页,其中显示ThingSpeak的HighStock数据图表。它将数据调用限制为8000个点,因此我需要进行多次调用以加载整个数据集。我计划在收到最新数据时显示图表,然后添加早期数据。我第一次尝试使用addPoint()将导航器扩展到1970年,但没有添加数据。添加日期早于当前数据的数据时是否存在问题?我应该如何编写脚本 下面是我如何调用addPoint()方法: 以及我发送给它的数组[]: fieldList: Array[3] 0: Object data: Ar

我正在编写一个网页,其中显示ThingSpeak的HighStock数据图表。它将数据调用限制为8000个点,因此我需要进行多次调用以加载整个数据集。我计划在收到最新数据时显示图表,然后添加早期数据。我第一次尝试使用addPoint()将导航器扩展到1970年,但没有添加数据。添加日期早于当前数据的数据时是否存在问题?我应该如何编写脚本

下面是我如何调用addPoint()方法:

以及我发送给它的数组[]:

fieldList: Array[3]
  0: Object
    data: Array[8000]
      0: Array[2]
          0: 1371821816000
          1: 36.79
        length: 2
        __proto__: Array[0]
      1: Array[2]
          0: 1371821836000
          1: 36.75
        length: 2
        __proto__: Array[0]
      2: Array[2]
      3: Array[2]
      4: Array[2]
我试着把turboThreshold增加到10000,但没用

然后我将add points()行替换为:

dynamicChart.series[fieldList[fieldIndex].series].addPoint({},false);
…得到了同样的结果。这是怎么回事?我的数据对象有什么问题?

addPoints()方法只添加一个点

我的解决方案是将新点推入原始区域数组,对其进行排序,然后使用setData()更新序列:

for (var h=0; h<data.feeds.length; h++)  // iterate through each feed (data point)
{
  // if a numerical value exists add it
  if (!isNaN(parseInt(v))) { fieldList[fieldIndex].data.push(p); }
}

fieldList[fieldIndex].data.sort(function(a,b){return a[0]-b[0]});
dynamicChart.series[fieldList[fieldIndex].series].setData(fieldList[fieldIndex].data,false);

用于(var h=0;ht在当前数据之前显示数据没有问题。如果您使用对象作为点,请确保您的点具有数字作为值,并且turboThreshold设置为足够高。此外,请以JSFIDLE为例说明该问题。请查看我添加到上述问题中的详细信息。抱歉,但我需要查看更多代码-正如我之前所说的,pla用JSFIDLE调用一段时间,然后重现这个问题。@PawełFus:我可能有答案。addPoint()可以在我尝试的一次调用中添加8000个[x,y]点的数组,还是只能添加一个[x,y]点?只有一个点。要设置点数组,请使用函数。
for (var h=0; h<data.feeds.length; h++)  // iterate through each feed (data point)
{
  // if a numerical value exists add it
  if (!isNaN(parseInt(v))) { fieldList[fieldIndex].data.push(p); }
}

fieldList[fieldIndex].data.sort(function(a,b){return a[0]-b[0]});
dynamicChart.series[fieldList[fieldIndex].series].setData(fieldList[fieldIndex].data,false);