2013-06-12 65 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應該有所幫助。