2013-04-06 6 views
0

하이 차트를 시작하면서 내가 만나는 문제가 상대적으로 단순하고 어리 석다는 것을 알기를 바랍니다.Ajax를 통한 하이 차트 및로드 데이터

원래 코드 :와

series: [{ 
    name: 'CPU utilization', 
    data: (function() { 
     // generate an array of random data 
     var data = [], 
     time = (new Date()).getTime(), 
     i; 
     for (i = -279; i <= 0; i++) { 
     data.push({ 
      x: time + i * 1000, 
      y: Math.random() * 10 
     }); 
     } 
     return data; 
    })() 
    } 
] 

을 대체 끌어 '진짜'데이터를 바로 일련의 데이터 조각을 http://www.highcharts.com/demo/dynamic-update

수정 -

나는 라이브 업데이트 데모를 Highcharts에서 샘플을했다 :

series: [{ 
    name: 'CPU utilization', 
    data: (function() { 
     $.ajax({ 
     url: '/api/data/query', 
     data: query, 
     content: "application/json", 
     type: "POST", 
     success: function (point) { 
      var vals = point.queries[0].results[0].values; 
      var data = [], 
      i; 
      for (i = -vals.length + 1; i <= 0; i++) { 
      data.push({ 
       x: vals[i + vals.length - 1][0], 
       y: vals[i + vals.length - 1][1] 
      }); 
      } 
      return data; 
     } 
     }); 
    })() 
    } 
] 

데이터 출력 형식은 id

랜덤 :

Array[280] 
[0 … 99] 
0: Object 
x: 1365259804521 
y: 9.2204492539 

리얼 :

Array[280] 
[0 … 99] 
0: Object 
x: 1365259979000 
y: 3 

실제 데이터를 사용하려고 할 때, 내가 갖는 highcharts 오류 :

Uncaught TypeError: Cannot call method 'push' of undefined highcharts.js:199 
P.addPoint highcharts.js:199 
$.ajax.success test2.html:265 
c jquery-1.9.1.min.js:3 
p.fireWith jquery-1.9.1.min.js:3 
k jquery-1.9.1.min.js:5 
r 
무작위 진짜 entical

어디서 볼 것인가? 나는 이것이 내가하고있는 일이 상당히 일상적이어야한다고 확신한다.

+0

이것은 매우 긴 샷이지만 일단 URL에 해시 태그가 없으면 하이 차트 및 AJAX에 문제가있었습니다. 아무 생각도, 왜. 아마 다른 것 일지라도 URL 끝에 '#'을 추가하십시오. – mrks

답변

0

'데이터'가 범위를 벗어나므로 즉시 함수를 호출해도 데이터가 반환되지 않습니다. var 데이터을 ajax 호출의 강력한 텍스트 외부로 선언하십시오. 이런 식으로 뭔가 : 나는 자신의 함수로 데이터 검색을 이동하는 경우 필요하지 않습니다

series: [{ 
     name: 'CPU utilization', 
     data: (function() { 
         var data; 
         $.ajax({ 
         url: '/api/data/query', 
         data: query, 
         async: false, 
         content: "application/json", 
         type: "POST", 
         success: function(point) { 
         data = point.queries[0].results[0].values; 
         } 
         }); 
      return data; 
     })() 
    }] 

내가 '거짓 비동기가'의심 :

(function() { 
    var data = []; 
    $.ajax({ 
    url: '/api/data/query', 
    ... 
    ... 
})(); 
+0

그건 의미가 있습니다 - 그러나, 나는 체인을 통해 모든 방법으로 데이터 변수를 움직이려고했지만 문제가 지속됩니다. 타이밍 문제 일 경우를 대비하여 동기식으로 아약스 호출을 설정합니다. FWIW, 콘솔에 시리즈를 로깅하면 실제 데이터가 불완전하지만 무작위 데이터는 280 개의 데이터 포인트로 구성됩니다. data : Array [0] to data : Array [280] - 함수 내에서, 분명히 전체 280 데이터 포인트를 보여줍니다. – user1552900

+1

Ahh. 나는 우리가 논리를 뒤집어 써야한다고 생각한다. Ajax 호출을 사용하여 데이터를 먼저 가져올 수 있고 success 핸들러에서 series 객체를 채워야한다. –

관련 문제