vxl*_*vxl 1 sorting jquery json direction
AJAX请求返回JSON字符串,如:{"1015": {some data here}, "1001": {some data here}- 它是JSON编码的PHP数组.
jQuery.parseJSON 函数返回Javascript对象并查看问题所在:IE8和FF4以相同的元素顺序返回对象:1015,1001(我认为是正确的方法),但Opera11和Chrome14以相反的顺序返回对象:1001,1015(但是继续JSON字符串是相同的).
这个问题有解决方法吗?
小智 5
这不是浏览器问题,而是滥用数据结构.
数组是一组有序的对象.根据定义,javascript集合/对象是无序集合.ECMA标准支持这一点.
关于铬V8项目有一个相对古老的问题,对该主题进行了长时间的讨论:http://code.google.com/p/v8/issues/detail?id = 164
它的要点是Chrome和Opera(实际上是IE9)正在对对象的数字键控成员进行排序,并将它们放在任何带有字符串键的成员之前.这是出于效率原因在访问对象时完成的,并且它在这些浏览器中按预期工作.FF和IE <9保留了不应该排序的结构的顺序,虽然它们没有做错,但这种行为不如Chrome,Opera和IE9那么正确.
您在项目中基本上有三种方法可以解决此问题:
在数据上调用array_values()以使其不相关.当你json_encode它时,默认情况下它将被编码为一个数组.然后,顺序将是在PHP中定义的任何顺序.由于您不想丢失密钥,因此应将它们存储在对象数据中.这是首选解决方案,最不可能长期打破.
定义您希望数据的顺序,并将其作为数组与对象数据一起传递.没有上述那么好,因为你最终传递的数据超过你真正需要的数量,它会把负担转嫁到客户端.
将键转换为每个键的开头或结尾带有一些字母字符的字符串.如果您正在使用遗留项目并且几乎无法控制您的体系结构,那么这只是一个不错的选择.
事实上,作为开发人员,您无法保证无序对象的订单将被保留.随着Web标准朝着这个方向发展,并且ECMA标准和未来标准的草案继续制定规则,其他浏览器将转向这种行为.不妨现在调整一下.
故事的道德:如果你需要保留秩序,请使用数组.
| 归档时间: |
|
| 查看次数: |
1611 次 |
| 最近记录: |