日期:2014-05-16 浏览次数:20399 次
?
1. json 数据中多余的逗号 :
?
代码 var man={ name:'zhang', ? } 末尾多出一个逗号,
?
在 FireFox 下正常,
?
在 IE下会报错:缺少标识符、字符串或数字(Expected identifier, string or number )。
?
这样的错误在文件中不太好找,我用ultraedit 的正则表达式 " ,[ ^t ^p ]+} " 查找这样的错误 ,? 删除多余的逗号,即可
?
?
?
2. json 键值对的键侵犯了 IE 保留字 :
?
??? 定义一个 json : var? test = { export:'....' }? , 键为 export
?
在 FireFox 下正常,
?
在 IE下会报错:缺少标识符、字符串或数字(Expected identifier, string or number )。
?
修改为别的键值如 exportx 则没有问题,似乎 IE 有这样的关键字?是否还保留了别的呢?不得而知。但是类似这样的问题,在定义 json 时真得小心了,不能那么随心所欲。
?
可喜的是,根据西门兄弟的提示,给 json 名加上引号就没有后顾之忧了:
?
var test = { 'export' : '....'? }
?
?
?
?
参考:
?
Javascript保留字(Javascript Reserved Words)
?
?
?
?
?
?
3. 取 json 值时,报错“对象不支持此属性 和 方法 (object doesn't support this property or method)” :
?
?? 原代码是从 jqgrid 中读取行数据,然后处理
?
// 读取 jqgrid 行,返回的值是JSON : // {"rn":"1",...,"WorkType":"校准" } var rowData = jqgrid_Samples_tab.getRowData( ids[i] ); cWorkType = rowData["WorkType"];
???? 运行到? WorkType = rowData["WorkType"]; 就报错。修改成 WorkType = rowData.WorkType也一样。
?
后来修改成 var WorkType = rowData["WorkType"]; 就可以了。再后来还发现,变量名和 JSON 键名不一样时,都不会报错,如 cWorkType = rowData["WorkType"] 也能正常运行。
?
?
???? 在 JavaScript 中,为变量定义加上一个 var 则限定变量为局部变量,否则就默认为全局变量。为了测试变量范围在 IE 中对 JSON 的影响,以及变量名与JSON键名同名的情况,单独做了一个测试程序,又没有发现类似的问题。
?
??? 是什么原因造成的这个错误呢 ? 以后在处理类似的问题时也得注意一下了,尽量不使用全局变量,或变量名不与JSON键同名。
?
?
?