我有一些javascript在一年多的时间内没有改变,突然之间就突然崩溃了。所以我的第一个想法是必须与数据相关。在查看数据时,看起来结构在一年内没有变化。已经很好的运行了很长时间,然后它突然崩溃了。
这是我的js,用一些JSON填充数组:
var history = [{BillingCycleHistoryID: 339, BillingCycleDate: '7/18/2014', StartTime: '7/18/2014', PercentComplete: 100, EndTime: '7/18/2014', HoursRan: 0.16, StartedBy: 'ADMIN'}];
Chrome开发者工具栏报告此错误:"未捕获类型错误:无法读取未定义的属性BillingCycleHistoryID。"该错误在" value.BillingCycleHistoryID"的行上被触发。下面...
if (typeof history != 'undefined') {
$.each(history, function (key, value) {
tbl.append(
'<tr data-history-id="' + value.BillingCycleHistoryID + '">' +
....[more down here]
当我将json粘贴到jsonlint中时,它会抛出一个对我来说没有意义的错误:
Parse error on line 2:
[ { BillingCycleHistoryI
--------------^
Expecting 'STRING', '}'
知道这里发生了什么吗?
答案 0 :(得分:2)
您的代码是有效的javascript,而不是其他人指出的严格有效的JSON。
在屏幕截图中,历史记录变量看起来不应该(它的长度应为1)。你可能只需要重命名它:'history'似乎是Chrome控制的全局变量。如果Chrome最近添加了此行为,则可以解释您的代码突然崩溃的原因。
请参阅http://www.javascripter.net/faq/reserved.htm
'history'严格来说并不是一个保留字,但最好还是作为全局变量名避免。 (如果你能避免它,那么使用全局变量是不明智的。)
答案 1 :(得分:1)
jsonlint错误来自于您没有将密钥括在引号中。这将正常工作,但jsonlint不喜欢它。您可以在常见问题解答中看到这一点:http://jsonlint.com/#
期待&#39; STRING&#39;,&#39; NUMBER&#39;,&#39; NULL&#39;,&#39; TRUE&#39;&#39; FALSE&#39;,& #39; {&#39;,&#39; [&#39;
您的列表末尾可能还有一个额外的逗号。类似的东西:[&#34; a&#34;,&#34; b&#34;,] 您也可能没有将收藏键括在引号中。一个集合的正确格式是:{&#34; key&#34;:&#34; value&#34; }
答案 2 :(得分:0)
字符串和变量应该用双引号试试这个:
[
{
"BillingCycleHistoryID": 339,
"BillingCycleDate": "7/18/2014",
"StartTime": "7/18/2014",
"PercentComplete": 100,
"EndTime": "7/18/2014",
"HoursRan": 0.16,
"StartedBy": "ADMIN"
}
]
答案 3 :(得分:0)
我认为你对JSON是什么感到困惑,你的例子根本就没有使用JSON。
如果你使用的是JSON,你会有类似的东西(如果使用jQuery)
var history = $.parseJSON("<<json string here>>");
您的示例只是声明一个变量(历史记录),该变量由包含一个匿名本机javascript对象的本机javascript数组组成。我假设您从某些后端代码中将该变量打印到页面上?
但是你的代码看起来是正确的,我在这里有一个有效的例子