jQuery: $ .getJSON сортирует данные в Chrome / IE? - PullRequest
1 голос
/ 21 февраля 2012

Я передаю ассоциативный массив (id => val) с помощью Ajax и получаю его с помощью $ .getJSON jQuery, который правильно читает данные и подготавливает объект.Однако существует очень раздражающая проблема сортировки.

Похоже, что в Chrome и IE данные сортируются по части id связанного массива.Поэтому, если массив должен быть (5 => 'xxx', 3 => 'fff'), он фактически становится (3 => 'fff', 5 => 'xxx').На FireFox он работает как положено, т.е. не отсортировано.

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 09 ноября 2012

Вы можете добавить начальный 0 для всех целочисленных индексов.

var json = { '05' => 'xxx', '03' => 'fff' };
0 голосов
/ 22 февраля 2012

Кажется, лучший способ - вообще избегать ассоциативных массивов. Если вы хотите отправить ассоциированный массив, просто отправьте его как два отдельных массива - один из ключей и один из значений. Вот код 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]);
            }
0 голосов
/ 21 февраля 2012

Другой вариант - вернуть данные в виде массива объектов. Это гарантирует, что объекты останутся в том порядке, в котором вы их возвращаете.

Edit:

По сути, для каждой пары ключ> значение переместите ее в новый массив и json_encode этот массив.

...