错误:不是Google图表中的数组

时间:2015-04-07 20:32:38

标签: jquery arrays google-visualization

我已设法通过输出以下字符串从数据库输出结果:

[['Grupo de edad','Mujeres','Hombres'],['Menos de 40',2,0],['De 40 a 49',7,3],['De 50 a 59',8,5],['De 60 a 69',20,25],['De 70 y más',6,10]]

如果我将此文本完全粘贴到以下内容中:

var data = google.visualization.arrayToDataTable([['Grupo de edad','Mujeres','Hombres'],['Menos de 40',2,0],['De 40 a 49',7,3],['De 50 a 59',8,5],['De 60 a 69',20,25],['De 70 y más',6,10]]);

我可以正确地想象图表。

但是,如果我通过使用jQuery .get()函数获取数据,然后我将数据传递给谷歌可视化功能,如下所示:

google.load("visualization", "1.1", {packages:["corechart","bar"]});
google.setOnLoadCallback(drawVisualization);

function drawVisualization() {
    $.get("{{URL::action('ChartController@investigadoresEdadSexo')}}", function(datos, status){
        var data = google.visualization.arrayToDataTable(datos);
        var options = {
            //many options ...
        };

        var chart = new google.visualization.ComboChart(document.getElementById('chart_div'));
        chart.draw(data, options);
    });//End of jQuery .get
}

我得到了

  

不是数组错误

我知道我正在传递一个字符串,但是如果我通过键入(复制和粘贴)google.visualization.arrayToDataTable()函数来测试该字符串,为什么它不起作用?或者我如何使该函数将该字符串解释为数组?

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

尝试使用datosJSON.parse转换为数组:

var data = google.visualization.arrayToDataTable(JSON.parse(datos));

更新

在解析datos之前,引号'应转换为"

datos = datos.replace(/'/g, '"');
var data = google.visualization.arrayToDataTable(JSON.parse(datos));

答案 1 :(得分:0)

当您将第一个文本粘贴到未粘贴文本的函数中时,您将创建一个arrayToDataTable函数使用的数组元素。

正如@phts指出的那样,你必须解析你的字符串以从中创建一个Array元素。将dataType参数设置为" json"并且它将获得一个JSON对象作为结果。

答案 2 :(得分:0)

非常感谢你这么多!在使用jsp ...

生成arraylist时,我在代码之前得到了非常奇怪的行

如果任何人的jsp代码出现问题,我就是这样做的。

Connection con = (Connection) session.getAttribute("conexao");
Locale.setDefault(Locale.GERMAN);
if (con == null) {
    response.sendRedirect("fimsessao.html");
    return;
}
request.setCharacterEncoding("UTF-8");
Statement st;
ResultSet rs;
String cod = String.valueOf(session.getAttribute("cod"));

//Variáveis de Insert e Update
SimpleDateFormat dt = new SimpleDateFormat("yyyy/MM");
String dates = null;
double peso = 0;
ArrayList relPeso = new ArrayList();
relPeso.add("['Datas'");
relPeso.add("'Peso']");
try {

    String query = "SELECT `data`, `peso` FROM asaacademia.tblavaliacaofis WHERE idUsuario = '" + cod + "';";
    PreparedStatement pstm = con.prepareStatement(query);
    rs = pstm.executeQuery();
    while (rs.next()) {
        dates = dt.format(rs.getTimestamp(1));
        peso = rs.getDouble(2);
        relPeso.add("['" + dates + "'");
        relPeso.add(String.valueOf(peso) + "]");
    }

    out.print(relPeso);
    System.out.print(relPeso);


} catch (Exception e) {
    e.printStackTrace();
}

也使用它来代替jQuery.parseJSON(queryObject):

  

从jQuery 3.0开始,不推荐使用$ .parseJSON。要解析JSON对象,请改用原生JSON.parse方法。

来源:http://api.jquery.com/jquery.parsejson/

这是我的HTML代码:

<div class="well">
    <script type="text/javascript">
        google.load("visualization", "1", {packages:["corechart"]});
        google.setOnLoadCallback(drawChart);
        //Puxar os dados do relatório de peso.
        var queryObject = "";
        $.ajax({
            url: 'peso.jsp',
            success: function (data) {
                queryObject = data;
                //alert(data);
            },
            error: function (xhr, type) {
                alert('server error occoured')
            }
        });

        function drawChart() {
            // Create and populate the data table. [['Datas', 'Peso'], ['2016/05', 95.0], ['2016/05', 93.0], ['2016/05', 92.0]]
            //var data = google.visualization.arrayToDataTable([['Datas', 'Peso'], ['2016/05', 95.0], ['2016/05', 93.0], ['2016/05', 92.0]]);
            //jQuery.parseJSON()
            queryObject = queryObject.trim();
            queryObject = queryObject.replace(/'/g, '"');
            queryObject = jQuery.parseJSON(queryObject);
            var data = google.visualization.arrayToDataTable(queryObject);
            var options = {
                vAxis: { title: 'Peso em KG' }
            };
            // Create and draw the visualization.
            new google.visualization.LineChart(
            document.getElementById('divPeso')).draw(data, options);
        }
    </script>
    <h3>Peso</h3>
    <div id="divPeso"></div>
</div>