jQuery:$ .getJSON对Chrome / IE上的数据进行排序?

我正在使用Ajax传递一个关联数组(id => val)并使用jQuery的$ .getJSON接收它,它正确读取数据并准备好对象。 但是,排序问题非常烦人。

看来,在Chrome和IE上,数据按关联数组的id部分排序。 因此,如果数组应该是(5 =>’xxx’,3 =>’fff’),它实际上变为(3 =>​​’fff’,5 =>’xxx’)。 在FireFox上,它按预期工作,即未排序。

有任何想法吗?

您可以为所有整数索引添加前导0。

var json = { '05' => 'xxx', '03' => 'fff' }; 

似乎最好的方法是完全避免关联数组。 如果要发送关联数组,只需将其作为两个单独的数组发送 – 其中一个是键,另一个是值。 这是执行此操作的PHP代码:

  $arWrapper = array(); $arWrapper['k'] = array_keys($arChoices); $arWrapper['v'] = array_values($arChoices); $json = json_encode($arWrapper); 

以及简单的JavaScript代码,可以用它做任何你喜欢的事情

  for (i=0; i < data['k'].length; i++) { console.log('key:' + data['k'][i] + ' val:' + data['v'][i]); } 

另一种选择是将数据作为对象数组返回。 这将确保对象保持按照您返回的顺序。

编辑:

基本上,对于每个键>值对,将其推送到新arrays并将json_encode推送到该arrays。

首先,您不应该在关联数组中假设任何类型的键排序。 不保证任何排序顺序。

无论如何,要解决这个问题,你应该自己对键进行排序。

http://jsfiddle.net/foxbunny/ZTXhp/

编辑:Object.keys是EcmaScript 5的function,所以如果您的目标浏览器不支持它,请加载es5-shim(https://github.com/kriskowal/es5-shim)。