在IE8中序列化空DOM元素时,JSON.stringify函数返回“null”

时间:2012-12-12 23:00:05

标签: javascript json internet-explorer-8

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

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

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

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

有关博客问题的详细信息,

  

在IE8中启用了本机JSON支持,用户现在可以利用它   用于序列化和内置的JSON.stringify和JSON.parse方法   将JScript值反序列化为JSON文本,反之亦然。 然而,那里   是IE8的本机JSON实现中的已知问题,其中如果a   user尝试读取空DOM元素的值,并序列化   使用原生JSON相同,结果与用户不一样   期待序列化“”

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

注意:这个问题是自我解答的。

1 个答案:

答案 0 :(得分:4)

修复方法是使用下面的审查功能返回""而不是"null"

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

修正了DEMO: http://jsfiddle.net/6VKzy/3/ [在IE8中打开以验证修复]

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

  

这是IE8生产版中的一个错误。这里的问题是   在DOM中,使用特殊编码来表示缺失   字符串值。即使这个特殊的价值不同于   在整个JScript中编码JScript文字“”   实现该值被视为===到“”,除了a   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