使用来自JSON数组

时间:2017-12-27 07:39:56

标签: javascript jquery arrays json ajax

我有一个JSON数组格式的数组。我想提取公共密钥的值,并用这个创建一个新的数组。 我试过这个

var date = [];
var amt = [];
for(var i in data){
    date.push(data[i].sale_date);
    amt.push(data[i].total);
}

其中sale_datetotal是关键。 但是这段代码返回了一个未定义对象的数组。 我的名为data的数组看起来像

{"sale_date":"2017-12-26 11:05:05","total":"500"}{"sale_date":"2017-12-26 11:05:18","total":"500"}

我期待两个数组date[2017-12-26 11:05:05, 2017-12-26 11:05:18 ]amt[500, 500] 我将data作为ajax响应从下面的代码中获取。

$sql = "SELECT sale_date, total FROM customers";
        $result = $conn->query($sql);
        if($result->num_rows>0){ 
            while($row=$result->fetch_assoc()){
                $db_data = $row;
                print json_encode($db_data);
            }
        }

这就是我的ajax请求的样子

$(document).ready(function(){
    $.post("ajax-req-handler.php",
    {
        key: "draw-line-chart"
    },
    function( data ){
        console.log(data);
        var date = [];
        var amt = [];
        for(var i in data){
            date.push(data[i].sale_date);
            amt.push(data[i].total);
        }
        console.log(date);
        console.log(amt);
     });
});

4 个答案:

答案 0 :(得分:2)

您需要在数组之间封装对象

var data = [{"sale_date":"2017-12-26 11:05:05","total":"500"},{"sale_date":"2017-12-26 11:05:18","total":"500"}]
var date = [];
var amt = [];

for(var i=0;i<data.length;i++){
    date.push(data[i].sale_date);
    amt.push(data[i].total);
}
console.log(date);
console.log(amt);

答案 1 :(得分:2)

&#13;
&#13;
var data = [
{"sale_date":"2017-12-26 11:05:05","total":"500"},{"sale_date":"2017-12-26 11:05:18","total":"500"}
];

var date = [];
var amt = [];
for(var i in data){
    console.log(i);
    date.push(data[i].sale_date);
    amt.push(data[i].total);
}

console.log(date);
console.log(amt);
&#13;
&#13;
&#13;

PHP代码: -

    $sql = "SELECT sale_date, total FROM customers";
        $result = $conn->query($sql);
        $data = array();
        if($result->num_rows>0){ 
            while($row=$result->fetch_assoc()){
                $db_data[] = $row;
            }
        }
   echo json_encode($db_data);

Ajax请求: -

$(document).ready(function(){
$.post("ajax-req-handler.php",
{
    key: "draw-line-chart"
},
function( data ){
    console.log(data);
    data = JSON.parse(data);
    var date = [];
    var amt = [];
    for(var i in data){
        date.push(data[i].sale_date);
        amt.push(data[i].total);
    }
    console.log(date);
    console.log(amt);
 });

});

答案 2 :(得分:2)

这不是JavaScript而是PHP问题....你发送的是无效的JSON。以下内容:

{"sale_date":"2017-12-26 11:05:05","total":"500"}{"sale_date":"2017-12-26 11:05:18","total":"500"}

实际上应该是这样的:

[{"sale_date":"2017-12-26 11:05:05","total":"500"},{"sale_date":"2017-12-26 11:05:18","total":"500"}]

您需要将PHP代码更改为:

// Add content type so that jQuery knows you're sending JSON
header("Content-Type: application/json");
$sql = "SELECT sale_date, total FROM customers";
$result = $conn->query($sql);
$db_data = array();
while ($row = $result->fetch_assoc()) {
    $db_data[] = $row;
}
echo json_encode($db_data);

发送Content-Type标题应该足够了,但您也应该更改您的jQuery代码以确保:

$(document).ready(function() {
    $.post("ajax-req-handler.php", {
        key: "draw-line-chart"
    }, function(data) {
        console.log(data);
        var date = [];
        var amt = [];
        for (var i in data) {
            date.push(data[i].sale_date);
            amt.push(data[i].total);
        }
        console.log(date);
        console.log(amt);
    }, "json");
    // the 4th parameter is dataType set to json
});

答案 3 :(得分:1)

//希望这会有所帮助。

var data = [ {"sale_date":"2017-12-26 11:05:05","total":"500"},{"sale_date":"2017-12-26 11:05:18","total":"500"} ];

var date = amt = [];

X = 0;

while (x < data.length) {
date.push(data[x].sale_date);
amt.push(data[x].total);
x++;
};

console.log(date);
console.log(amt);

<强>解释

第1行是对象数组,表示你从ur json数据中提取的数据。

第2行是两个变量数组的声明,它被赋值给空数组。所以,我使用了在同一行语句中声明多变量的简短形式。

第3行是计数器“x”的初始化,一旦计数到数组“data”中的最后一个Object,它将帮助打破While循环。

第4行。然后是While循环,它继续遍历数组“data”。那里的条件语句总是检查计数器“x”是否为&lt; (小于)数组的长度在每次迭代中。

第5行。在While循环块代码中使用计数器“x”作为数组的索引来访问该数组索引中对象的属性“sale_date”并将其推送到数组“date”(即添加它在数组“date”的末尾。)

第6行。与第5行相同,访问数组“data”的索引中的属性total并将其推送到数组“amt”。

第7行将计数器“x”递增1并将其指定回x,用于重新评估While循环。

8号线&amp; 9只是一个控制台日志,分别显示日期和amt的内容。

由于

希望这对你有意义...请告诉我你的反馈。

相关问题