jquery json длины многомерного массива - PullRequest
1 голос
/ 19 ноября 2009

Я использую jQuery ajax json для вызова 3-мерного массива PHP в Javascript. массив PHP выглядит так:

    $rate[0][1]['name'] = 'guff';
    $rate[0][1]['value'] = 'puff';
    $rate[0][2]['name'] = 'guff';
    $rate[0][2]['value'] = 'puff';
    $rate[0][3]['name'] = 'guff';
    $rate[0][3]['value'] = 'puff';
    $rate[1][1]['name'] = 'guff';
    $rate[1][1]['value'] = 'puff';
    $rate[1][2]['name'] = 'guff';
    $rate[1][2]['value'] = 'puff';

Я пытаюсь найти длину вложенных массивов, например, rate[1].length когда я получаю это от вызова jjery ajax:

    $.ajax({
        type: 'post',
        url: 'ajax_load_rates.php',
        data: 'trip_type='+$('#trip_type').val(),
        dataType: "json",
        success: function(dat) {
            rates = dat;
    }});

jQuery, похоже, конвертирует внешний массив, поэтому rates.length дает мне значение. Но не конвертирует вложенные массивы, поэтому rates[9].length не определено

Я попытался перебрать массив, чтобы преобразовать его вручную:

    $(rates).each(function(i) {
        rates[i] = jQuery.makeArray($(this));   
        console.log(rates[i].length);
    });

Но я получаю значения 1, когда знаю, что есть нагрузки.

здесь образец строки json:

[{"1":{"name":"Single-trip base loading","value":"10","default":"0"},"2":{"name":"Multi-trip base loading","value":"50","default":"0"}},{"1":{"name":"City break","value":"70","default":"0"},"2":{"name":"Sun and sand","value":"75","default":"0"},"3":{"name":"Backpacker","value":"90","default":"0"},"4":{"name":"Horse riding","value":"120","default":"0"},"5":{"name":"Safari","value":"80","default":"0"},"6":{"name":"Golf","value":"85","default":"0"},"7":{"name":"Surf and sail","value":"140","default":"0"},"8":{"name":"Road runner","value":"130","default":"0"},"9":{"name":"Flotilla","value":"150","default":"0"},"10":{"name":"Offshore sailor","value":"200","default":"0"},"11":{"name":"Kite surfer","value":"300","default":"0"}}]

Любые идеи, помощь будет здорово. Я совершенно новичок в json / ajax / jQuery. Вы могли бы узнать по моему коду.

ура

грабят.

1 Ответ

0 голосов
/ 19 ноября 2009

В PHP, если вы не запускаете массив с индексом 0, он обрабатывается как ассоциативный массив. Затем он становится объектом в JSON, когда вы используете метод json_encode.

Существует ряд оптимизаций, которые вы можете внести в свой код, но, поскольку вы только что привели это в качестве примера, я предполагаю, что ваш реальный код имеет гораздо больше возможностей.

Это тот же код, который вы указали, только индекс элементов второго уровня теперь начинается с нуля вместо одного

$rate[0][0]['name'] = 'guff';
$rate[0][0]['value'] = 'puff';
$rate[0][1]['name'] = 'guff';
$rate[0][1]['value'] = 'puff';
$rate[0][2]['name'] = 'guff';
$rate[0][2]['value'] = 'puff';
$rate[1][0]['name'] = 'guff';
$rate[1][0]['value'] = 'puff';
$rate[1][1]['name'] = 'guff';
$rate[1][1]['value'] = 'puff';

Пройдя через json_encode, получим следующее:

[[{"name":"guff","value":"puff"},{"name":"guff","value":"puff"},{"name":"guff","value":"puff"}],[{"name":"guff","value":"puff"},{"name":"guff","value":"puff"}]]

Где вы можете видеть, что элементы второго уровня все еще являются массивом в JSON ([]) вместо объекта ({}).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...