我有一个JSON数组格式的数组。我想提取公共密钥的值,并用这个创建一个新的数组。 我试过这个
var date = [];
var amt = [];
for(var i in data){
date.push(data[i].sale_date);
amt.push(data[i].total);
}
其中sale_date
和total
是关键。
但是这段代码返回了一个未定义对象的数组。
我的名为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);
});
});
答案 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)
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;
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的内容。
由于
希望这对你有意义...请告诉我你的反馈。