首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将PHP转换为用于Google的JavaScript数组

将PHP转换为用于Google的JavaScript数组
EN

Stack Overflow用户
提问于 2016-02-19 14:48:37
回答 1查看 1K关注 0票数 1

我试图使用从MySQL数据库中提取的数据构建Google图表。

加载页面后,我将进行ajax调用,从MySQL中提取数据并将其返回到视图。

我是这样从PHP返回数据的:

代码语言:javascript
运行
复制
echo json_encode("['test', 'test2', 1],['test2', 'test3', 1],");

现在,当我签入JavaScript返回的数据类型时,它会说"string“。

代码语言:javascript
运行
复制
console.log(typeof myData); // string

然而,图表需要数组。因此,当我将这些数据传递给构建图表的函数时,它会返回错误。下面是我试图构建它的方法:

代码语言:javascript
运行
复制
data.addRows([
    myData
]); 

但它又带来了:

代码语言:javascript
运行
复制
Uncaught Error: Every row given must be either null or an array.    

但是如果我用data.addRows直接对数据进行硬编码的话,它就会非常好.就像下面这样很好

代码语言:javascript
运行
复制
data.addRows([
    ['test', 'test2', 1],['test2', 'test3', 1],
]); 

如何强制JavaScript接受从php返回的myData?

我尝试以数组的形式从PHP中返回数据,并在JavaScript中循环它并填充图表,但有时我返回50000行或更多,而且JavaScript不能很好地处理这么多行的循环(速度慢,有时内存不足和崩溃浏览器)。所以我想如果我以字符串JavaScript的形式返回它,不需要循环它,只需将它传递给图表生成器。

编辑:我附加了我的ajax调用函数和绘制图表的函数

这是从php/mysql中提取数据的ajax调用:

代码语言:javascript
运行
复制
function ajaxCall() {
    $(function() {

        $.ajax({
            type: "POST",
            url: "/test",
            dataType: "JSON",
            success: function(myData) {         
                // Draw the graph
                drawChart(myData);
            },
            error: function(xhr,status,error) {
                console.log("error status: " + status + " / the error is: " + error);
            },
        });     
    });
}

此函数将使用从PHP返回的数据绘制图表:

代码语言:javascript
运行
复制
function drawChart(myData) {
    var data = new google.visualization.DataTable();
    data.addColumn('string', 'From');
    data.addColumn('string', 'To');
    data.addColumn('number', 'Weight');

    data.addRows([
        myData          
    ]);     

    // Calculate graph height, by multiplying number of rows and fixed value
    var rowsQty = data.getNumberOfRows();
    var autoHeight = rowsQty*15;

    if(autoHeight < 300) {
        autoHeight = 300;
    }

    // Sets chart options.
    var options = {
        // width: 600,
        height: autoHeight,
    };

    // Instantiates and draws our chart, passing in some options.
    var chart = new google.visualization.Sankey(document.getElementById('sankey_basic'));
    chart.draw(data, options);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-19 15:03:20

YOu还没有生成数组作为json,您使用了一个包含PHP数组定义的字符串(完整地包含了逗号语法错误),并对其进行了编码:

代码语言:javascript
运行
复制
echo json_encode("['test', 'test2', 1],['test2', 'test3', 1],");
                 ^---------------------string----------------^

所以你要发送的是这段文字:

代码语言:javascript
运行
复制
  "\"['test','test2',1]['test2','test3',1],\""

它只是一个json编码的字符串--再说一遍,它不是数组。

如果要遍历实际数组,则需要编码PHP数组,而不是PHP字符串:

代码语言:javascript
运行
复制
echo json_encode(array(array('test', 'test2', 1),array('test2', 'test3', 1));
--or--
echo json_encode([['test1','test2',1],['test2','test3',1]]);

注意缺少关于[[...]]版本的引号的

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35508055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档