gpt4 book ai didi

jQuery parseJson 对象方向(IE 和 Firefox 与 Opera 和 Chrome)

转载 作者:行者123 更新时间:2023-12-01 06:56:58 24 4
gpt4 key购买 nike

AJAX 请求返回 JSON 字符串,例如:{"1015": {此处有一些数据},"1001": {此处有一些数据} - 它是 JSON 编码的 PHP 数组。

jQuery.parseJSON 函数返回 Javascript 对象并查看问题出在哪里:IE8和FF4返回具有相同元素顺序的对象:1015, 1001(我认为这是正确的方法),但Opera11和Chrome14返回具有相反顺序的对象:1001, 1015(但进行的JSON字符串是相同的)。

这个问题有解决办法吗?

最佳答案

这不是浏览器问题,而是数据结构的滥用。

数组是一组有序的对象。根据定义,JavaScript 集合/对象是一个无序集合。 ECMA 标准支持这一点。

关于 chromium V8 项目有一个相对古老的问题,对此主题进行了长时间的讨论:http://code.google.com/p/v8/issues/detail?id=164

其要点是 Chrome 和 Opera(实际上还有 IE9)对对象的数字键成员进行排序,并将它们放置在任何具有字符串键的成员之前。这样做是出于访问对象时的效率原因,并且它在这些浏览器中按预期工作。 FF 和 IE < 9 保留了不应排序的结构的顺序,虽然它们没有做错什么,但这种行为不如 Chrome、Opera 和 IE9 正确。

您基本上可以通过三种方法在项目中解决此问题:

  1. 对数据调用 array_values() 以使其不关联。什么时候你对它进行 json_encode,默认情况下它将被编码为数组。这order 将是 PHP 中定义的任何顺序。自从您不想丢失 key ,您应该将它们存放在对象数据。这是首选解决方案,也是最不可能的解决方案打破长期。

  2. 定义您希望数据的顺序并将其作为数组以及您的对象数据。不如上面的那么好,因为你最终传递的数据比你真正需要的多,它改变了给客户带来负担。

  3. 将您的键转换为带有一些字母字符的字符串每个键的开始或结束。如果您是这样的话,这只是一个不错的选择处理遗留项目并且几乎无法控制您的架构。

事实是,作为开发人员,您无法保证无序对象的顺序将被保留。随着网络标准朝着这个方向发展,并且 ECMA 标准和 future 标准草案继续制定规则,其他浏览器将转向这种行为。不妨现在就调整一下。

这个故事的寓意:如果需要保持顺序,请使用数组。

关于jQuery parseJson 对象方向(IE 和 Firefox 与 Opera 和 Chrome),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7881718/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com