我有来自PHP的JSON响应:
[[{"name":"J1","id":"0088","order":"2928868"}],[{"name":"J2","id":"0171","order":"2928868"}],[{"name":"J2","id":"0249","order":"2928868"}]]
我想要做的就是输出订单号,它在id为#ordernum的元素中始终是相同的。
然后对于其他部分,我想在容器div中为名称和id创建几个div。
我很确定我可以使用它,但我不确定的是如何遍历每个JSON行以到达我可以创建我的div的部分
这是我到目前为止所做的,但这会附加到div,我想创建新的div。
我需要在$('#ordernum')之后再做一个$ .each()。text(row [0] .order);?
$.ajax({
type: "POST",
url: "check.php",
data: { order: order },
dataType: "json",
cache: false,
success: function(response) {
if(response.length != 0) {
console.log(response.order);
$.each(response, function(index, row) {
console.log(row);
$('#ordernum').text(row[0].order);
$('.name').append(row[0].name+"<br />");
$('.id').append(row[0].id+"<br />");
});
}
else {
$('#foo').text('Order number not found!!');
}
// set the focus to the order input
$('#order').focus().val('');
},
error : function(XMLHttpRequest, textStatus, errorThrown) {
console.log('An Ajax error was thrown.');
console.log(XMLHttpRequest);
console.log(textStatus);
console.log(errorThrown);
}
});
修改
这就是json的创建方式。 $ rows来自SQLSERVER数据库的查询,我遍历它以获取MySQL数据库中的所有行
foreach($rows as $row) {
$sql = 'SELECT bin, id FROM totebin WHERE id= :id';
$stmt = $db->prepare($sql);
$stmt->bindValue(':tote', trim($row['id']));
$stmt->execute();
$array = $stmt->fetchAll(PDO::FETCH_ASSOC);
$array[0]['id'] = str_pad($array[0]['id'], 4, '0', STR_PAD_LEFT);
$array[0]['order'] = trim($row['order']);
$output[] = $array;
}
echo json_encode($output);
答案 0 :(得分:2)
我认为一切正常 只需 response.order 就会说未定义。
如果.each循环不起作用然后放在循环之前 var response = $ .parseJSON(response)。
如果你需要像
那样的回复[{"name":"J1","id":"0088","order":"2928868"},{"name":"J2","id":"0171","order":"2928868"},{"name":"J2","id":"0249","order":"2928868"}]
然后在PHP代码中你可以在倒数第二行
$output[] = $array[0];
然后你不需要javascript中的索引。
$('#ordernum').text(row[0].order);
将此代码放入fire bug控制台。
var response =[[{"name":"J1","id":"0088","order":"2928868"}],[{"name":"J2","id":"0171","order":"2928868"}],[{"name":"J2","id":"0249","order":"2928868"}]];
console.log(response.length);
console.log(response.order);
$.each(response, function(index, row) {
console.log(row[0].name);
});
并检查结果
你可以在第一个循环中创建你的div,你不需要第二个,就像你不改变你的反应,或者你重新格式化它。