Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jquery ajax i odwrotne json
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
nospor
Hejka, mam taki kod js:
Kod
$.ajax({
  url: 'testjs.php',
dataType : 'json',
  success: function( data ) {
for (var i in data) alert(i);
  }
});

Kod ten pobiera ajaxem dane z testjs.php w formacie json, a następnie wyświetla w ten sposób uzyskane dane

testjs.php:
  1. <?php
  2. $ar = array(3=>'bla',2=>'ola',1=>'costam');
  3. echo json_encode($ar);
  4. ?>

Jak widzicie, skrypt generuje tablice o indeksach w kolejności 3,2,1.
Niestety przeglądarka Chrome oraz Opera przy konwersji json, sortuje dane i są one już w kolejności 1,2,3
Firefox nie sortuje danych.

Oczywiście zależy mi, by dane w JSON w przeglądarce były w takiej kolejności, w jakiej je zapodaje. Czy to bug przeglądarek, czy normalne zachowanie dla JSON i muszę inaczej to obejść?
wookieb
Dla JSON-a nie sądzę. Dla chrome i opery jak widać tak.
Nie da się tego obejść. To po prostu element głupoty przeglądarek. W skrócie - witaj w świecie śmieciowego JS.

Albo pobawisz się w coś takiego...
  1. $jsonArr = array(
  2. array('key' => 3, 'value' => 'bla')
  3. ....
  4. );

albo zamiast obiektu użyjesz tablicy - niestety stracisz klucze
  1. $jsonArr = array('bla', 'ola', 'costam');
nospor
Z tego co wylukałem to rozwiązaniem jest zamienie indeksów na teksty:
$ar = array('c3'=>'bla','c2'=>'ola','c1'=>'costam');
Wówczas opera i chrome nie sortują danych.
Innym rozwiązaniem jest sortowanie danych w js.
wookieb
To nic nie dało. Próbowałem.
Kod
$.parseJSON('{"3":"bla","2":"ola","1":"costam"}');
nospor
Nie, nie.... smile.gif

nie "3"
a: "c3"
lub: "dowolnytekst3"
wookieb
Wybacz, niezauważyłem ;(
nospor
wookieb Twoje rozwiązanie w pierszym poście też jest prawidłowe. Dobiero dzisiaj je przemyślałem na trzeźwo wink.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.