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键同名。