这里真正的问题不是未定义的属性,但我无法找出原因。它是一个由PHP填充的大型JSON字符串,它包含一个文件列表,子目录列表等,以及一个名为Mt的Object中的一些额外信息。这个Mt有一些属性,一些字符串,对象和两个数组,它们都是未定义的!
Mt JSON字符串:
{
"Mt": {
"About": "Dublin Core Metadata Based, project DC+, version 1.0",
"Name": "AlgunsEBooks",
"Version": "1.0",
"FileExtension": "mt",
"Fields": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
"IndexedFields": [1, 2],
"FieldKey": "1",
"StringEncoding": {
"Text": "URI",
"Code": "none",
"Date": "none",
"RasterImage": "Base64",
"VectorImage": "Base64"
},
"DescriptionFieldsBasic": {
"previousFileName": "String",
"previousFileTime": "String",
"icone": "String-RasterImage",
"orelha": "String"
},
"DescriptionFieldsExtras": {
"obs": "String"
},
"DescriptionType": "Object",
"IncludedFilesMasc": "{base}.{ext}",
"IncludedFilesFields": {
"base": "{base}",
"ext": "pdf|epub|jpg"
}
}
}
我通过jsonlint.com验证了它。通过使用JSON.parse,它将完美地变成一个Object。但是当我在向PHP(执行文件列表并生成JSON)请求后收到相同的字符串时,不会工作。两个"领域"和#34; IndexedFields"属性未定义。
xmlhttprequest返回的字符串可能包含一些使这些特定点中的JSON无效的字符,但是当我通过console.log打印字符串时,我得到的字符串是有效字符串。我试图复制由console.log打印的字符串,并在一个单独的测试代码中执行JSON.parse,它可以工作,所以打印的字符串不是var的所有内容。 我还尝试将PHP答案保存到文件中,结果又是一个有效的字符串,问题是加载时xmlhttprequest事件返回的字符串。错误必须在var中,但我无法看到它。
有什么想法吗?
答案 0 :(得分:0)
我的问题被低估了,所以人们可能不会感兴趣,也不会发布任何答案,所以不是要求别人去做,我会自己做。
真的有一个答案,而且非常重要!
根据Fernando Urban的建议,我开始向Fields和IndexedFields发送其他值以查看会发生什么,结果始终未定义。所以我把这个名字字段改为StrangeThings一直到这个过程。所以StrangeThings产生了我期待的阵列 - 完美!但是对象仍然有Fields:undefined,而不是我开始在console.log打印对象之前搜索此属性的源,没有一个。字段是什么都没有创建的?最后我记得在多年前使用Flash时我已经遇到过这种麻烦 - AS3:
控制台显示的是在自己的行之后创建的值。在console.log下面有两个处理这些数组的函数(这些数组是与另一个数组相关联的数字)。这些函数的类型错误,结果未定义(稍后将处理)。删除这些行后,Fields消失了,IndexedFields返回了预期的数组。
因此在某些情况下,我们必须在调试时考虑非线性执行。我在Safari,Firefox和Chrome中测试过,它是一个标准,但我没有进一步的信息 - 如果有,请提供帮助!