【发布时间】:2014-04-22 22:26:22
【问题描述】:
我有以下由服务器注入网页的 JavaScript 变量。
<script type="text/javascript">
var jsonData = [{"display_mode":...}];
</script>
页面上有一个按钮,可根据需要通过 AJAX 将此数据发送回以应用一些转换。这适用于 Chrome、FF、IE10 和 IE11。
在 IE8 和 IE9 中,这个数组被区别对待,当你使用 IE8 调试器观察窗口时,你会看到
当它将此数据发送到服务器时,它看起来像这样:
'{"0":{"display_mode":"TREE",...
请注意,一旦离开浏览器,数组现在是一个带有字符串键的对象,但在浏览器中它是一个带有整数键的对象,而当它在源中发送时是一个真正的数组。
应该是这样的:
'[{"display_mode":"TREE",....
我在做什么来触发这个浏览器中的这种行为?有什么方法可以不触发这种行为吗?
我正在使用 extjs4.2.2 序列化 JSON,就像在 IE10、11、Chrome 和 FF 上一样。只有在这些版本的 IE 上,它才会将数组更改为键控对象以进行序列化
现在我正在研究一个解决方案,我将迭代假数组并构建一个新的有效数组,以根据 extjs 框架检测到的版本发送回网络服务器。我不喜欢添加这样的代码,因为版本检测很脆弱。我宁愿这从一开始就不会发生。
【问题讨论】:
-
所有键,无论是数组还是对象,在 JS 中都是有效的字符串。你似乎有一个序列化问题。那么你是如何序列化数据的呢?你一直在模糊地引用对象、数组、真实的、虚假的数据……我不知道你在哪里拥有什么。
-
我认为任何版本的 IE 都不会这样做。还有一些你没有提到的信息吗?顺便说一句,任何属性名称都会在内部转换为字符串,甚至是数组属性。
-
typeof [] == "object",我猜调试器所做的只是类型检查。 -
“在 IE8 和 IE9 中,这个数组的处理方式是不同的” 除了调试器输出之外,究竟是什么方式?
-
如何将
jsonData转换为 JSON?
标签: javascript internet-explorer-8 internet-explorer-9 extjs4.2