2

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

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

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

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

博客中有关该问题的更多详细信息,

在 IE8 中启用原生 JSON 支持后,用户现在可以利用内置的 JSON.stringify 和 JSON.parse 方法将 JScript 值序列化和反序列化为 JSON 文本,反之亦然。但是,在 IE8 的原生 JSON 实现中存在一个已知问题,其中如果用户尝试读取空 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

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

4

1 回答 1

4

解决方法是使用下面的审查函数来返回""而不是"null".

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

修复DEMO: 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

于 2012-12-12T23:00:04.790 回答