2013-11-18 5 views
0

Я беру график точек графика из базы данных и график повторения после каждых 10 секунд, чтобы любые изменения в базе данных отражались на графике. Но в моем случае это не работает, и изменения графика меняются только при перезагрузке страницы. Ниже мой кодjqplot replot не работает для гистограммы

<?php 
    $z_data = json_encode($this->testData('123')); 
    ?> 

Javascript код

$(document).ready(function(){ 
    $.jqplot.config.enablePlugins = true; 
    var s2 = $z_data; 
    var plot5 = $.jqplot('big', [s2], { 
     seriesDefaults:{ 
      renderer:$.jqplot.BarRenderer, 
     }, 
     axes: { 
      xaxis: { 
       renderer: $.jqplot.CategoryAxisRenderer, 
      } 
     }, 
     highlighter: { show: false } 
    }); 
    $('a[href="#dash4"]').on('shown', function(g) { 
     plot5.replot(); 
    }); 

    setInterval(function() { 
     var s4 = []; 
     var toi = $z_data 
     for (var k=0; k<11; k++){ 
      s4.push([k, toi[k]]); 
     } 


     $('#big').unbind(); 
     plot5.destroy(); 
     plot5.series[0].data = s4; 
     plot5.resetAxesScale(); 
     plot5.replot(true); 
     }, 
     10000 
    ); 

    $.jqplot.config.enablePlugins = false; 

}); 

Где я делаю ошибку? Также база данных обновляется каждые 5 секунд, поэтому изменение должно отражаться на графике, так как я обновляю его каждые 10 секунд.

+0

Объявления s2 и s4 различны. Попробуйте указать s2 как s4, поскольку он работает для этого последнего – AnthonyLeGovic

+0

Нет, это не работает. – prattom

ответ

0

Вот решение: JsFiddle link

В примере я предположил, фиктивные данные, чтобы доказать концепцию кода.

$(document).ready(function(){ 
    $.jqplot.config.enablePlugins = true; 
    var s2 = [1,2,4,5,7,23,4,40,7,3,8]; 
    var plot5 = $.jqplot('big', [s2], { 
     seriesDefaults:{ 
      renderer:$.jqplot.BarRenderer, 
     }, 
     axes: { 
      xaxis: { 
       renderer: $.jqplot.CategoryAxisRenderer, 
      } 
     }, 
     highlighter: { show: false } 
    }); 
    $('a[href="#dash4"]').on('shown', function(g) { 
     plot5.replot(); 
    }); 

    setInterval(function() { 
     var s4 = []; 
     s2.shift(); 
     var toi = s2; 
     toi.push(Math.round(Math.random()*10)); 
     for (var k=0; k<11; k++){ 
      s4.push([k+1, toi[k]]); 
     } 

     plot5.destroy(); 
     plot5.series[0].data = s4; 
     plot5.replot(true); 
     }, 
     10000 
    ); 

}); 
-1

Вы должны определить plot5 как глобальную переменную.

+0

Почему? На него не ссылаются вне области действия функции обратного вызова. –

+0

plot5 находится в функции. Когда вы обращаетесь к переменной, она будет отображаться неопределенно. – karampal

+0

Да, если вы попытаетесь получить доступ к нему за пределами функции готовности. Однако это не похоже на то, что OP пытается это сделать. –

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