使用图表绘制图表.js填充每个 JsonRPC 获取的数据

Drawing chart with Chart.js filled with data gotten per JsonRPC

本文关键字:JsonRPC 获取 数据 填充 绘制 用图表 js      更新时间:2023-09-26

我想从每个JavaScript对PHP服务器的JsonRPC调用中获取结果以供进一步使用(使用Chart.js绘制图表)。为此,我有一个函数,它应该执行调用并返回结果。我使用这个jQuery插件:https://github.com/datagraph/jquery-jsonrpc

$.jsonRPC.setup({
    endPoint: '/jsonserver.php'
});
var res; // first place
function getMyStuff() {
    var res; // second place as alternative
    $.jsonRPC.request('getResultsById', {
        params: [1],
        success: function(result) {
            alert(JSON.stringify(result, null, 4)); // works well
            res = result;
        },
        error: function(result) {
            alert("error: " + JSON.stringify(result, null, 4));
        }
    });
    return res;
}

我的问题是我不知道如何从成功块中得到结果。如果我调用该函数,我总是未定义。

请求是异步处理的,因此您需要提供回调,就像您在"成功"和"错误"块中所做的那样。可能最简单的方法是提供另一个回调来调用结果,如下所示:

$.jsonRPC.setup({
    endPoint: '/jsonserver.php'
});
getMyStuff(function (result) {
    console.log("here's the result", result);
});
function getMyStuff(callback) {
    $.jsonRPC.request('getResultsById', {
        params: [1],
        success: callback,
        error: function(result) {
            console.error("error:", result);
        }
    });
}

谢谢大家的提示。
对于遇到相同问题的每个人 - 我的工作代码示例:

$.jsonRPC.setup({
    endPoint: '/jsonserver.php'
});
drawMyChart(function (result) {
    var ctx = document.getElementById("canvas").getContext("2d");
    var lineChartData = {
        labels: makeSuitableArrayLabel(result),
        datasets : [
            {
                fillColor : "#F06292",
                data: makeSuitableArrayFirst(result)
            },
            {
                fillColor : "#1565C0",
                data: makeSuitableArraySecond(result)
            }
        ]
    };
    window.myLine = new Chart(ctx).Line(lineChartData, {
        // options
    });
});
function drawMyChart(callback) {
    $.jsonRPC.request('getResultsById', {
        params: [1],
        success: callback,
        error: function(result) {
            console.error("error:", result);
        }
    });
}
// add
$("#add").click(function() {
    myLine.addData([1, 2], "label");
});