【问题标题】:Getting data from nested array passed to Javascript / Jquery from PHP / Cakephp via JSON从嵌套数组中获取数据,通过 JSON 从 PHP/Cakephp 传递给 Javascript/Jquery
【发布时间】:2010-07-24 10:06:23
【问题描述】:

很抱歉提出这样的基本问题,但我已经阅读了几个小时了,这些示例在我的数组方式的上下文中对我没有意义......我已经能够通过这从我的服务器端(cakephp)到javascript(我正在使用jquery)但在那之后,我对如何使用数据感到迷茫。我尝试使用警报来显示它,但它给出的输出如下“对象对象”仅此而已..

这是我拥有的一个示例数组:

    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],它们就像第二层数组的自增 ID。

第 2 层有一个包含第 3 层的数组,第二层实际上不包含除第 3 层数组以外的任何数据(由于它表示数据库表,因此由 cakephp 完成)

所以,第 3 层数组有我需要的所有数据,但我也想使用第 1 层 ID

在 PHP 中,访问此数组中的单个数据:

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

这是我尝试过的一些 javascript 不起作用(json 是数组名称):

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

感谢您的任何建议,只是我的数组是一个嵌套数组(因为它来自数据库调用),而且似乎大多数示例都没有深入到这让我感到困惑。

【问题讨论】:

  • 您可以在 JavaScript 中以相同的方式访问 JSON 对象。

标签: php javascript jquery arrays json


【解决方案1】:

PHP 中的“关联数组”(即具有有意义的键,例如您的“uiemail_id”)将成为 JSON 表示法中的对象。即使是不完全以 0 为索引且连续的数组也将成为一。(即带有键0,1,2 的数组将产生一个数组,键1,2,30,2,3 将产生一个对象。

如果您像这样访问 PHP 中的值:

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

在 js 中对结果结构的访问是:

arrayline = jsonvar[0].Uiemail.toppos;

在 firefox 中启用带有断点的 firebug,让您可以轻松地在空闲时检查任何可用的变量,这使得调试比通常的默认 PHP 方式简单得多,即仅将变量表示法转储到 stdout(即@987654326 @/var_dump's)。

【讨论】:

  • 谢谢,这有助于我更好地理解它,我不知道我可以在 firebug 中查看它.. 会尝试一下
【解决方案2】:

试试这个:

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

如果json 是你的javascript object,它(希望)已经被解析为json,你不能调用jQuery constructor function 并期望它像这样工作。

使用 $.each() 辅助函数通过 jQuery 迭代对象。

如果你仍然得到[object Object] 作为警报,那是因为那些sub elementsArrays 或真正的Objects 他们自己,所以你需要更深入地挖掘。好的帮助是FireBugconsole.dir()

参考:$.each()

【讨论】:

  • 当我这样做时,我仍然只是得到 [object Object] 我正在编辑我的帖子以解释有关数组结构的更多信息,因为它基本上对于每组条目都有 3 个数组,这有点过于复杂但它是 cakephp 输出数据的方式
  • @Rick:无论创建什么数据结构,使用FireFoxChrome并调用console.dir(json)。这将向您详细展示该对象,并让您更好地了解如何访问单个子对象/数组。
【解决方案3】:

我不太了解您的数组表示法...但我猜 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);
    });
});

【讨论】:

  • 感谢您的帖子。我更新了我的 OP 以更好地解释数组
  • @Rick - 鉴于此,我怀疑我上面的结构仍然正确。您在我的代码示例中看到如何在第一个调用中添加另一个“每个”调用。正如 jAndy 建议的那样,根据嵌套的深度,您只需要继续添加每个调用的另一个级别以匹配结构。注意第一级如何有 json 和 element,第二级有 element 和 sub……第三级有 sub 和 x,第四级有 x 和 x1,等等。
  • 谢谢,会试试看。。昨晚没机会去,因为太晚了
【解决方案4】:

您必须为此使用jQuery.each()

【讨论】:

  • 我正在查看 jquery .each 但他们提供的示例似乎无法帮助我弄清楚如何执行这种类型的嵌套数组,我将再次查看它是否可以发布在这里更好地尝试我正在尝试做的事情
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
  • 2011-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多