我正在尝试使用从php脚本收到的数据,这是json_encode'd,但我似乎无法正确使用。
这是我正在使用的javascript函数 JS:
function dispJSON(items) {
console.log('Raw from PHP:' + items);
var strJSON = JSON.stringify(items);
console.log('Sent from PHP and stringified:' + strJSON);
$('#results').append(strJSON + '<hr>');
var opStr = '';
for (i=0; i<items.length; i++){ //Get each Record
console.log('REC=' + items[i].tostring);
for (var key in items[i]) {
console.log(key + ' => ' + items[i][key]);
}
}
}
这就是控制台所说的。 控制台:
WCIT.html:60 Sent from PHP and stringified:[[{"vehGrpName":"Austin","vehTitle":"Austin A30 (AS3 and AS4)","vehDescrip":"The new look Baby Austin to rival the Morris Minor."}],[{"vehGrpName":"Austin","vehTitle":"Austin A35","vehDescrip":"An improved A30. Better brakes, gearbox and engine."}]]
WCIT.html:64 REC=undefined
WCIT.html:66 0 => [object Object]
WCIT.html:64 REC=undefined
WCIT.html:66 0 => [object Object]
所以我显然误解了一些基础知识。我的javascript / json知识非常有限。
我似乎得到一个数组(所有记录),由两个数组组成(即每个记录,其中包含记录的json对象)
我的代码显然很垃圾,所以如果有人能说得对,我会非常感激。
由于
答案 0 :(得分:1)
在你的dispJSON
函数中,你根本不再处理JSON(这是一种文本数据表示法) - 某些地方的某些东西已经为你反序列化了(这很方便)。你正在处理结果数组。从字符串化副本的外观来看,它是一个数组数组,子数组中的每个条目(奇怪的是每个只有一个条目)是一个具有各种属性的对象:
[
[
{
"vehGrpName": "Austin",
"vehTitle": "Austin A30 (AS3 and AS4)",
"vehDescrip": "The new look Baby Austin to rival the Morris Minor."
}
],
[
{
"vehGrpName": "Austin",
"vehTitle": "Austin A35",
"vehDescrip": "An improved A30. Better brakes, gearbox and engine."
}
]
]
(jsonlint对漂亮的印刷结构非常方便。)
所以你需要遍历它并处理每个子数组及其条目(live copy):
function dispStuff(items) {
var outer, inner, sub, entry;
for (outer = 0; outer < items.length; ++outer) {
sub = items[outer];
for (inner = 0; inner < sub.length; ++inner) {
entry = sub[inner];
console.log("Entry " + outer + "," + inner + ":");
console.log("vehGrpName = " + entry.vehGrpName);
console.log("vehTitle = " + entry.vehTitle);
console.log("vehDescrip = " + entry.vehDescrip);
}
}
}
或者,如果您不想在代码中使用输入键(live copy):
function dispStuff(items) {
var outer, inner, sub, entry, name;
for (outer = 0; outer < items.length; ++outer) {
sub = items[outer];
for (inner = 0; inner < sub.length; ++inner) {
entry = sub[inner];
console.log("Entry " + outer + "," + inner + ":");
for (name in entry) {
console.log(name + " = " + entry[name]);
}
}
}
}
这是有效的,因为for..in
遍历对象中属性的名称(以及其任何原型对象的属性名称),并且因为您可以通过两种不同的方式引用对象属性:在熟悉的obj.propName
表单中propName
是文字,或obj["propName"]
表单,其中属性名称是字符串。当然,因为它是一个字符串,它可以是任何表达式的结果。
另外:您可能想知道为什么您的PHP代码正在创建每个都有一个条目的子数组......