Automatyczne sortowanie JSON przez Operę i Chrome
Niedawno napotkałem na dość ciekawy problem. Pobierałem sobie ajaxem dane w postaci JSON a następnie wyświetlałem je w takiej kolejności, w jakiej otrzymałem. Jednak pewnego dnia klient zgłosił mi błąd, że dane wyświetlają się odwrotnie pod Chrome. Jak się później okazało podobny problem był również z Operą. A by przedstawić Wam dokładnie problem, pokażę przykładowy kod i dane, które powodują błąd.
Kod js:
$.ajax({
url: 'testjs.php',
dataType : 'json',
success: function( data ) {
for (var i in data) alert(i);
}
});
oraz plik testjs.php
<?php
$ar = array(3=>'bla',2=>'ola',1=>'costam');
echo json_encode($ar);
?>
Jak widzicie, plik testjs.php generuje mi dane w kolejności 3,2,1. Niestety Opera i Chrome odbiera te dane w kolejności posortowanej 1,2,3. FireFox czy też IE nie sortują danych.
Rozwiązaniem tej sytuacji okazało się niestosowanie indeksów numerycznych tylko tekstowych, np.
<?php
$ar = array('c3'=>'bla','c2'=>'ola','c1'=>'costam');
echo json_encode($ar);
?>
Zamiast literki 'c' można wstawić dowolny tekst. Jeśli jednak ktoś z różnych przyczyn nie może zrobić takiego obejścia, to pozostaje jedynie sortowanie danych w js.