我有一个简单的ajax调用,如下所示:
var data = jQuery.parseJSON(response.d);
response.d
内容为:
{"d":"[[{\"ExtensionData\":{},\"categoryId\":\"Help\"}],{\"11\":\"This is 11\",\"10\":\"This is 10\",\"7\":\"This is 7\",\"6\":\"This is 6\",\"12\":\"This is 12\",\"5\":\"This is 5\",\"4\":\"This is 4\",\"2\":\"This is 2\",\"1\":\"This is 1\"}]"}
当我运行代码并查看包含的数据时,它看起来像这样:
......等等,你明白了。它为什么突然排序?如何关闭" autosort"?
答案 0 :(得分:12)
永远不能保证在JavaScript中反序列化和序列化之间保留对象键顺序。保证密钥顺序的唯一方法是提取对象的密钥并根据确定性标准对其进行排序,即为了保证顺序,您必须使用数组。
编辑:
问题的一种可能解决方案是将对象键的数组包含在中,以将键值集合(原始对象)包含到服务器响应中。通过迭代有序键,您可以按照所需的顺序访问对象。
E.g。
var data = {
values: { /* your original object here */ },
/* keep a record of key order and include the keys as an array
in your response. That way you can guarantee order. */
keys: [11, 10, 7, 6, 12, 5, 4, 2, 1]
};
data.keys.forEach(function (key) {
var value = data.values[key];
/* do work here */
});
答案 1 :(得分:-2)
jQuery.parseJSON();
不会对您的对象进行排序。但有些浏览器会在渲染后对对象进行排序。有关说明,请参阅here