JSON.stringfy 函数在 IE8 中序列化空 DOM 元素时返回"null"



我的页面中有一个弹出对话框,大约有20个字段。这20个字段可以修改,对对话框的任何更改都将更新到服务器。

只有在IE8中,当用户尝试清除字段并保存内容时,字段值才会设置为null

使用IE8的本机JSON.stringfy函数序列化DOM元素的值似乎返回了"null"(字符串)而不是""

演示:http://jsfiddle.net/6VKzy/2/[在IE8中打开]

关于这个问题的更多细节来自博客,

IE8中启用了本地JSON支持,用户现在可以利用它用于序列化和将JScript值反序列化为JSON文本,反之亦然然而是IE8的原生JSON实现中的一个已知问题,其中如果用户尝试读取空DOM元素的值,并序列化与使用本机JSON相同,结果与用户不同序列化">时出现expect。

http://blogs.msdn.com/b/jscript/archive/2009/06/23/serializing-the-value-of-empty-dom-elements-using-native-json-in-ie8.aspx

注意:这个问题是自己回答的。

修复方法是使用下面这样的审查程序函数返回""而不是"null"

function(k, v) { return v === "" ? "" : v }

固定演示:http://jsfiddle.net/6VKzy/3/[在IE8中打开以验证修复]

更多细节和不同的方法在博客中修复,

这是IE8生产版本中的一个错误。这里的问题是在DOM中,使用特殊编码来表示缺失字符串值。尽管此特殊值与JScript文本"的编码,贯穿整个JScript实现时,该值被视为===到",除了JSON.stringify.中的具体案例

由于该特殊值仅源自对DOM对象的访问,一种变通方法是在每次访问DOM时都显式审查它们这可能会返回一个。

http://blogs.msdn.com/b/jscript/archive/2009/06/23/serializing-the-value-of-empty-dom-elements-using-native-json-in-ie8.aspx

最新更新