JQPlot auto refresh chart with dynamic ajax data

后端 未结 2 1294
猫巷女王i
猫巷女王i 2020-12-06 02:39

I want to update the chart drawn by jqPlot sequentially in time intervals.

My use case is such that the AJAX call returns only a single value. For e.g.:



        
相关标签:
2条回答
  • 2020-12-06 03:27

    Let me add to @charlietfl answer. When you use replot() it takes 2 times longer to redraw, rather than with destroying jqplot. So use destroy() to redraw plot.

    $.jqplot('chart1', [storedData]).replot();
    

    http://jsfiddle.net/zjjvm/ it takes 46sec to draw running sine using replot()

    plot1.destroy();
    plot1 = $.jqplot('chart1', [storedData])
    

    http://jsfiddle.net/p9SbP/ it takes 25sec to draw the same using destroy()

    0 讨论(0)
  • 2020-12-06 03:28

    You will need to store the data in an array then push new data to the array within each ajax call.

    Here is a simple demo using a button to start the AJAX updates on a 3 second interval:

    /* store empty array or array of original data to plot on page load */
    
    var storedData = [3, 7];
    
    /* initialize plot*/
    
    var plot1;
    renderGraph();
    
    $('button').click( function(){
        doUpdate();
        $(this).hide();
    });
    
    function renderGraph() {
        if (plot1) {
            plot1.destroy();
        }
        plot1 = $.jqplot('chart1', [storedData]);
    }
    /* sample data for demo*/   
    var newData = [9, 1, 4, 6, 8, 2, 5];
    
    
    function doUpdate() {
        if (newData.length) {
            /* used to pull new number from sample data for demo*/
            var val = newData.shift();
    
            $.post('/echo/html/', {
                html: val
            }, function(response) {
                var newVal = new Number(response); /* update storedData array*/
                storedData.push(newVal);
                renderGraph();               
                setTimeout(doUpdate, 3000)
            })
    
        } else {
            alert("All Done")
        }
    }
    

    DEMO: http://jsfiddle.net/ZqCXP/

    0 讨论(0)
提交回复
热议问题