2013-07-16 5 views
1

Я пытаюсь использовать JQPlot для построения данных, основанных на реальном времени.jqplot replot using dateaxisrenderer пуст

Поскольку это данные в реальном времени, я делаю вызов ajax каждые 10 секунд, чтобы получить новые данные и добавить их к существующему набору данных перед ретрансляцией.

Первоначальное построение графика JQPlot прекрасное, но впоследствии с первого повтора диаграмма становится пустой навсегда.

Это мой код javascript.

$.jqplot.config.enablePlugins = false; 

    var Graph; 
    var GraphUpdate; 
    var GraphData = []; 
    var interval = 10000; 
    var npoints = 25; 
    var maxIterations = 200; 
    var niters = 0; 


    var fetchInProgress = false; 
    var lastSuccessCDR = 0; 

    function BuildDataArray() { 

     GraphData = []; 
     lastSuccessCDR = 0; 


     if(fetchInProgress == false) 
     { 
      postdata = 'successCDR='+lastSuccessCDR; 
      fetchInProgress = true; 
      $.ajax({url:'/CDR-Analyser/php/livedata_fetch.php', 
       type:'POST', 
       data:postdata, 
       async:true, 
       dataType:"json", 
       success: function(data,status){ 

         if(lastSuccessCDR == 0) 
         { 
          //GraphData = [data[0]['data']]; 
          GraphData = [[["2013-07-17 21:11:20",2],["2013-07-17 21:12:20",5],["2013-07-17 21:14:20",7]]]; 
          //GraphData = [[[1,2],[2,5],[3,7]]]; 
          lastSuccessCDR = data[1]['lastCDR']; 


          Graph = $.jqplot('livechart', GraphData, { 

           stackseries : true, 
           seriesDefaults: { 
            showMarker: false, 
            fill: true, 
            fillAndStroke: true 
           }, 
           axes: { 

             xaxis: { 
              //numberTicks:2, 
              //renderer:$.jqplot.DateAxisRenderer, 
              //pad:0, 
              renderer:$.jqplot.DateAxisRenderer, 
              tickOptions: { 
               angle: -30 
              } 

             }, 
             yaxis: { 
              label: 'Call Count', 
              //min:0, 
              //max:30, 
              tickInterval:2, 
              labelRenderer: $.jqplot.CanvasAxisLabelRenderer 
             } 
            }, 
           cursor:{ 
            zoom:true, 
            looseZoom: true 
           } 
          }); 
         } 


         fetchInProgress = false; 
        } 
      }); 
     } 
    } 

    function UpdateDataArray() { 

     var set = 0; 

     if(fetchInProgress == false) 
     { 
      postdata = 'successCDR='+lastSuccessCDR; 
      fetchInProgress = true; 
      $.ajax({url:'/CDR-Analyser/php/livedata_fetch.php', 
       type:'POST', 
       data:postdata, 
       async:true, 
       dataType:"json", 
       success: function(data,status){ 
         set = [data[0]['data']]; 
         lastSuccessCDR = data[1]['lastCDR']; 

         var newData = new Array(); 
         newData = GraphData; 

         newData[0].shift(); 
         newData[0].push(set[0][0]); 
         GraphData = [["2013-07-17 21:11:20",2],["2013-07-17 21:12:20",5]]; 
         //Graph.series[0].data = newData[0]; 
         Graph.series[0].data = [["2013-07-17 21:11:20",2],["2013-07-17 21:12:20",5]]; 
         //Graph.data[0] = [["2013-07-17 21:12:20",5],["2013-07-17 21:14:20",7]] ; 


         Graph.replot({resetAxes:true}); 

         fetchInProgress = false; 
        } 
      }); 
     } 



     return set; 

    } 

    function StartGraphLoop() { 
     BuildDataArray(); 

     GraphUpdate = setInterval(UpdateGraph, interval); 
    } 


    function UpdateGraph() { 
     UpdateDataArray(); 

    } 

    function StopGraphLoop() { 

     clearInterval(GraphUpdate); 
    } 

У меня есть две функции выше, BuildDataArray() и updateDataArray() для построения исходных данных и набор для получения последующих элементов данных.

Как вы можете видеть, я заменил фактические данные, полученные от ajax (он прокомментирован) с образцами данных, чтобы проверить поведение JQPlot. К сожалению, с этими образцовыми данными также диаграмма исчезает при вызове первого реплика. Я ранее тестировал это с образцами данных без дат (например, [[1,2], [2,5], [3,4]]), комментируя параметр dateaxisrenderer в свойстве xaxis.

Так что теперь у меня нет выбора, так что либо я чего-то не хватает, либо это ошибка в JQPlot при рендеринге dateaxis.

Пожалуйста посоветуйте

+0

Вы попробовали установить $ .jqplot.config.enablePlugins = true; – Gyandeep

+0

@Gyandeep - да, я постарался установить его в true раньше, но никаких изменений в поведении. – Shyam

+0

вы можете подготовить пример jsfiddle для этого. – Gyandeep

ответ

1

У меня была та же проблема, используя dateAxisRenderer где ряд были обновленное и сюжет перерисован, но не было никаких данных в моем графике. После того, как много царапин головы я нашел this stackoverflow answer

Вместо обновления данных серии через

chartObj.series[i].data = // your data 

Вы можете создать переменную и передать его в качестве аргумента функции Replot(). Для того, чтобы использовать фрагмент из C5H8NNaO4 в качестве примера

var series = [[1,2],[2,3]]; 
chartObj.replot({data:series}); 

Я не тестировал его с кодом, но, похоже, у нас была такая же проблема, и это решило проблему для меня. Если это работает, я предлагаю вам также проголосовать за начальный ответ :)

Смежные вопросы