2013-06-12 40 views
0

我想从API获取数据加载到我的图表上。所有数据都正确地到达图表,但图表无法加载,并且出现无响应的脚本错误。我正在使用Highcharts。有什么建议么?谢谢。我的代码如下。Javascript无响应的脚本错误

型号

public function ajax_get_chart() { 

    $quotes = $this->rest->get('api/1/BTCUSD/trades/fetch'); 
    $series_data = array(); 
    $results = $quotes->return; 
    $i = 0; 

    foreach ($results as $quote) 
    { 
     $series_tmp = array(
      'date'  => $quote->date, 
      'price'  => $quote->price 
     ); 
     $series_data[]= $series_tmp; 
     $i= $i+1; 
    } 
    die (json_encode($series_data)); 
    return TRUE; 
} 

的Javascript

$(document).ready(function() { 
    var chart; 
    $.ajax({ 
     url: "/chart/ajax_get_chart", // the URL of the controller action method 
     dataType: "json", 
     success: function(result) 
     { 
      chart = new Highcharts.Chart({ 
       chart: { 
        renderTo: 'container', 
        defaultSeriesType: 'bar' 
       }, 
       title: { 
        text: 'Stacked bar chart' 
       }, 
       xAxis: { 
        title: { 
         text: 'Price' 
        } 
       }, 
       yAxis: { 
        min: 0, 
        title: { 
         text: 'Date' 
        } 
       }, 
       legend: { 
        backgroundColor: '#FFFFFF', 
        reversed: true 
       }, 
       tooltip: { 
        formatter: function() { 
         return ''+ 
          this.series.name +': '+ this.y +''; 
        } 
       }, 
       plotOptions: {}, 
       series: result 
      }); 
     } 
    }); 
}); 
+0

为什么你使用'die()'作为正常退出? – Barmar

+0

我摆脱了死亡(),我不再出现错误,现在图表显示在容器中,但它只是图表的白色背景,没有数据。 – evann

+1

你用'echo'代替它吗?或者'也许'返回',这取决于如何调用函数? – Barmar

回答

0

听起来就像是问题是,有太多的数据来呈现。

您可以尝试使用更快的浏览器(Chrome通常运行得非常快),限制数据或尝试其他图表库。

限制数据可能是最有可能的工作。如果需要显示所有数据,最好的方法是只加载部分数据,然后如果用户例如滚动图表,则加载缺失的数据。

另一种同时呈现更多数据的方法是计算服务器上数据的平均值。例如,如果股票数据来自每秒,则可以预先计算服务器上的每小时甚至每日平均值。这通常允许您显示相对准确的图表而不会导致性能问题,并且如果放大图表,许多库也支持动态加载更准确的数据。

+0

谢谢。我想我会想要加载部分数据,然后在用户滚动图表时进行更多加载。但是,我并不确定如何做到这一点。 – evann

0

Highcharts无法处理如此庞大的数据量,但使用Highstock with dataGrouping或延迟加载,您应该能够处理很多点,请参阅demo

另外this article应该有所帮助。