javascript - 程序绘制完Google Charts后如何赋值?

标签 javascript json ajax google-visualization

我知道这听起来有点奇怪,但我在这里有一段代码:

let globalResult = [];
let defaultData = ["None", 1200, 1200, 1200, 1200, 1200, 1200, 1200,
1200, 1200, 1200, 1200];
$(document).ready(() => {
    // set a listener on the textbox
    $('#input').on("change", (evt) => {
        let text = $('#input').val();
        // the {text: text} sends a parameter named text with the
        // value of what was typed in the textbox
        $.get("/display", {text: text})
            .done((data) => {
                globalResult = data['result'];
                $('#input').val('');   // reset the textbox
                //Draw Graph
                google.charts.load('current', {'packages':['corechart']});
                google.charts.setOnLoadCallback(drawChart);

                function drawChart() {
                    //Chart stuff.... Doesn't matter
                    //It's programmed to Draw Line with defaultData and globalResult
                    };

                    var chart = new google.visualization.LineChart(document.getElementById('curve_chart'));

                    chart.draw(data, options);
                    //Swap Value here:
                    defaultData = globalResult;
                }

            })

我尝试在绘制图表后交换 defaultDataglobalResult,但是在交换数据时总是绘制新图表,从而导致图表中断(就像另一条线刚刚死在图画中间,留下一半的线卡在那里)。如果我尝试将它们放在函数drawChart之外,它将绘制两条相同的线,中间有另一个模具。而且我也无法将其放置在 $.get() 范围之外,因为不会绘制图表。我该如何解决这个问题?

最佳答案

加载语句 (google.charts.load) 将等待文档准备就绪,
在执行回调之前,或者 promise 它返回...
因此,不需要 --> $(document).ready

首先使用 Promise 加载 google,
然后创建图表并保存引用以供以后使用,
这将允许您使用任何数据绘制相同的图表

推荐类似于以下的设置...

let globalResult = [];
let defaultData = ["None", 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200];

google.charts.load('current', {
  packages: ['corechart']
}).then(() => {
    // save reference to chart here
    var chart = new google.visualization.LineChart(document.getElementById('curve_chart'));

    $('#input').on("change", (evt) => {
        let text = $('#input').val();
        // the {text: text} sends a parameter named text with the
        // value of what was typed in the textbox
        $.get("/display", {text: text})
            .done((data) => {
                globalResult = data['result'];
                $('#input').val('');   // reset the textbox

                //Chart stuff....
                chart.draw(data, options);

                //Swap Value here:
                defaultData = globalResult;
            });

    });
});

关于javascript - 程序绘制完Google Charts后如何赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47706123/

相关文章:

javascript - 在 Windows 7 中运行 Express.js

javascript - ExtJS 4.1.1 : Custom display text for multi-select combobox

ios - 格式化 JSON 接收到的字符串

javascript - 启动时运行多个脚本的NodeJS包

javascript - Mocha 测试用 .then stub 了 ajax 调用

javascript - JQuery,AJAX : How can I populate an array with a json return?

php - 将 PHP MySQL REQUESTED DATE 输出为 XML 并以 HTML 读取

javascript - 如果未进行选择,则显示预定义值 - Javascript

javascript - 从 Node 中的多个嵌套回调中返回值

javascript - 防止 JSON.parse 重新排列对象