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)。