Я пытаюсь использовать 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.
Пожалуйста посоветуйте
Вы попробовали установить $ .jqplot.config.enablePlugins = true; – Gyandeep
@Gyandeep - да, я постарался установить его в true раньше, но никаких изменений в поведении. – Shyam
вы можете подготовить пример jsfiddle для этого. – Gyandeep