Получение данных из вложенного массива, передаваемого в Javascript / Jquery из PHP / Cakephp через JSON - PullRequest
1 голос
/ 24 июля 2010

Извините, что задаю такой простой вопрос, как этот, но я читаю об этом в течение нескольких часов, и примеры не имеют смысла для меня в контексте того, как мой массив ... Я смог передатьэто со стороны моего сервера (cakephp) на javascript (я использую jquery), но после этого я заблудился относительно того, как использовать данные .. Я попытался просто показать это с помощью оповещения, но он выдает вывод как"Object Object" и это все ..

Это пример массива, который у меня есть:

    Array ( 

    [0] => Array ( [Uiemail] => Array ( [uiemail_id] => 2 [divid] => upd1 [width] => 200 [height] => 200 [leftpos] => 122 [toppos] => 122 [cssgroup] => 1 [colortop] => [colorbottom] => [colorborder] => [borderwidth] => [zindex] => ) ) 

    [1] => Array ( [Uiemail] => Array ( [uiemail_id] => 3 [divid] => upd2 [width] => 200 [height] => 200 [leftpos] => 333 [toppos] => 444 [cssgroup] => 1 [colortop] => [colorbottom] => [colorborder] => [borderwidth] => [zindex] => ) ) 

    [2] => Array ( [Uiemail] => Array ( [uiemail_id] => 4 [divid] => upd3 [width] => 200 [height] => 200 [leftpos] => 555 [toppos] => 466 [cssgroup] => 1 [colortop] => [colorbottom] => [colorborder] => [borderwidth] => [zindex] => ) ) 

) 

РЕДАКТИРОВАНИЕ:

Массивкак он выводится из базы данных Cakephp GET (эквивалент этому cakephp).

Он имеет 3 массива, первый - «родительский массив» и содержит [1], [2],[3] которые похожи на идентификатор автоинкремента для массивов 2-го уровня.

2-й уровень имеет массив, который содержит 3-й, эта секунда на самом деле не содержит никаких данных, кроме 3-го массива (егосделано так, как показано на cakephp, поскольку оно представляет таблицу базы данных)

Итак, массив 3-го уровня содержит все данные, которые мне нужны, однако я также хотел бы использовать идентификатор первого уровня

В PHP ИНДИВИДУАЛЬНАЯ ЧАСТЬ ДАННЫХ ИЗ ЭТОГО МОДУЛЯ ДОСТУПНА КАК ТАКИМ:

$arrayline = [0]['Uiemail']['toppos'];

Вот некоторый javascript, который я пробовал, который не работал (json - имя массива):

    $(json).each(function() {
      alert(this.text)
    });
});

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

Ответы [ 4 ]

1 голос
/ 24 июля 2010

«Ассоциативный массив» в PHP (то есть со значимыми ключами, такими как ваш «uiemail_id», станет объектом в нотации JSON. Даже массив, который не является точно 0-индексированным и непрерывным, также станет единым целым . (т.е. массив с ключами 0,1,2 приведет к массиву, ключи 1,2,3 или 0,2,3 приведут к объекту.

Если вы получаете доступ к значению в PHP следующим образом:

$arrayline = $array[0]['Uiemail']['toppos'];

Доступ к результирующей структуре в js будет:

arrayline = jsonvar[0].Uiemail.toppos;

Включение firebug в firefox с точками останова позволяет вам легко проверять любую переменную, доступную в тот момент на досуге, что значительно упрощает отладку по сравнению с обычным способом PHP по умолчанию - просто выгрузить запись переменных в стандартный вывод (т. Е. printr / var_dump х).

1 голос
/ 24 июля 2010

Попробуйте:

$.each(json, function(index, element){
  alert(element);
});

, если json это ваш javascript object, который (надеюсь) уже был проанализирован как json, вы не можете вызвать jQuery constructor function и ожидать егочтобы работать так:

Используйте вспомогательную функцию $.each() для перебора объекта с помощью jQuery.

Если вы все еще получили [object Object] в качестве предупреждения, это потому, что эти sub elements являются Arrays или реально Objects сами, так что вам нужно копать глубже.Хорошая помощь - FireBug и console.dir()

Ссылка: $. Каждый ()

1 голос
/ 24 июля 2010

Я не совсем понимаю вашу запись массива ... но я думаю, что представление в json / javascript будет:

[
    [[2, 'udp1', 200, 200, 122, ....]],
    [[3, 'udp2', 200, 200, 333, ....]],
    [[4, 'udp3', 200, 200, 555, ....]]
]

Когда вы передаете массив в json, «индексные имена» не передаются.

Если это структура, то что-то вроде этого может получить что-то:

$.each(json, function(index, element){
    $.each(element, function(index, sub){
      alert(sub);
    });
});
0 голосов
/ 24 июля 2010

Для этого вы должны использовать jQuery.each () .

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