Javascript / JSON错误:TypeError:myObj未定义

时间:2017-05-26 17:53:41

标签: javascript json ajax chart.js

我正在尝试使用数据库中的数据创建图表。我创建了一个PHP文件,将数据放入多维数组中。该数组包含四个数组,每个数组有五个值。最后,我在PHP的json_encode() - 方法中回显多维数组。

使用我的Javascript文件,我想获得JSON,但它不完整。我得到了多维数组的第一个数组和第二个数组的第一个数组。

console.log()告诉我有一个错误" TypeError:myObj未定义"在第12行,但我在脚本中找不到错误。

这是我的Javascript:



window.onload=function(){
    var xmlhttp = new XMLHttpRequest();

    xmlhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
          var myObj = JSON.parse(this.responseText);
        }

        var ctx = document.getElementById("overviewChart");

        var data = {
            labels: [myObj[0][0], myObj[0][1], myObj[0][2], myObj[0][3], myObj[0][4]],
            datasets: [
                {
                    backgroundColor: "rgba(255, 120, 42, 0.7)",
                    hoverBackgroundColor: "rgba(255, 120, 42, 1)",
                    borderColor: "rgba(255, 120, 42, 0.9)",
                    borderWidth: 3,
                    label : "Offen",
                    data: [myObj[1][0], myObj[1][1], myObj[1][2], myObj[1][3], myObj[1][4]]
                },
                {
                    backgroundColor: "rgba(50, 255, 50, 0.7)",
                    hoverBackgroundColor: "rgba(50, 255, 50, 1)",
                    borderColor: "rgba(50, 255, 50, 0.9)",
                    borderWidth: 3,
                    label: "Bestätigt",
                    data: [myObj[2][0], myObj[2][1], myObj[2][2], myObj[2][3], myObj[2][4]]
                },
                {
                    backgroundColor: "rgba(255, 30, 30, 0.8)",
                    hoverBackgroundColor: "rgba(255, 30, 30, 1)",
                    borderColor: "rgba(255, 30, 30, 0.9)",
                    borderWidth: 3,
                    label : "Storniert",
                    data: [myObj[3][0], myObj[3][1], myObj[3][2], myObj[3][3], myObj[3][4]]
                }
            ]
        };
    }
}




1 个答案:

答案 0 :(得分:0)

你只需在this.readyState == 4&& this.status == 200:

if (this.readyState == 4 && this.status == 200) {
    var myObj = JSON.parse(this.responseText);
}

但是,xmlhttp.onreadystatechange函数的其余部分仍然会为其他readyState值运行,在这种情况下,myObj将是未定义的。

因此,整个函数体应该在if条件内:

xmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
        var myObj = JSON.parse(this.responseText);

        var ctx = document.getElementById("overviewChart");

        var data = {
            labels: [myObj[0][0], myObj[0][1], myObj[0][2], myObj[0][3], myObj[0][4]],
            datasets: [
                {
                    backgroundColor: "rgba(255, 120, 42, 0.7)",
                    hoverBackgroundColor: "rgba(255, 120, 42, 1)",
                    borderColor: "rgba(255, 120, 42, 0.9)",
                    borderWidth: 3,
                    label : "Offen",
                    data: [myObj[1][0], myObj[1][1], myObj[1][2], myObj[1][3], myObj[1][4]]
                },
                {
                    backgroundColor: "rgba(50, 255, 50, 0.7)",
                    hoverBackgroundColor: "rgba(50, 255, 50, 1)",
                    borderColor: "rgba(50, 255, 50, 0.9)",
                    borderWidth: 3,
                    label: "Bestätigt",
                    data: [myObj[2][0], myObj[2][1], myObj[2][2], myObj[2][3], myObj[2][4]]
                },
                {
                    backgroundColor: "rgba(255, 30, 30, 0.8)",
                    hoverBackgroundColor: "rgba(255, 30, 30, 1)",
                    borderColor: "rgba(255, 30, 30, 0.9)",
                    borderWidth: 3,
                    label : "Storniert",
                    data: [myObj[3][0], myObj[3][1], myObj[3][2], myObj[3][3], myObj[3][4]]
                }
            ]
        }
    }
};