【问题标题】:retrieve json encoded multidimensional array with ajax用ajax检索json编码的多维数组
【发布时间】:2017-02-23 16:50:38
【问题描述】:

我成功(测试)调用了一个 ajax 请求到一个 php 脚本。这是我需要工作的代码部分:

   success: function (response, status) {
       $.each(response, function (i, item) {
          alert(item.id);

item.id 只是...什么都没有。

这是php页面生成的-json_encoded数组:

[
  {
    "conto": "1"
  },
  {
    "id": "4",
    "activity_id": "50",
    "path": "Testo/base.png",
    "title": "Ffgf",
    "descrizione": "Tttt"
  },
  {
    "id": "8",
    "activity_id": "50",
    "path": "Testo/61FCFUX_IMG_0536.PNG",
    "title": "Hggggg",
    "descrizione": "Tgg"
  }
]

我做错了什么?

ps:如果你注意到了,这是两个数组之间的数组合并:第一个只是报告“conto” in,另一个是通过数据库获取元素生成的列表。

【问题讨论】:

  • 在第一次迭代中,item.id 不会被定义,因为它根本不存在于该对象中。检查:if (item.id) { //do your stuff }

标签: php arrays json ajax


【解决方案1】:

你的第一个数组不包含 id 所以你得到未定义的值。跳过第一个数组:

$.each(response, function (i, item) {
         if(i==0)
         {
            alert(item.costo);
          }
          else
          {
            alert(item.id);
           //Or better to use console
           console.log(item.id);
          }

        });

【讨论】:

  • 不工作...我认为这个问题与它是一个多维数组有关。
  • 然后检查您的回复,因为根据您的示例它应该可以工作。请参见示例:jsfiddle.net/sqdjk1zL
  • @GiovanniPalerma 你说的多维数组在哪里?
  • 但以这种方式似乎我无法再检索 item.conto 了。基本上我需要访问第一个数组作为条件。我有“如果(item.conto!= 1)做某事”。 @Coder 我的错误,它不是多维数组。 if (item.conto!=1) { if (i>0) { ...?
  • 嗯仍然不是我的意思。 conto 可以是 1 或其他数字。仅当 conto !=1 时我才需要执行代码,基本上我的实际代码如下所示:pastebin.com/ia24un1Q
【解决方案2】:

我相信您的问题与您的参考有关。由于您的 JSON 对象包含一个数组,因此您需要使用下标来引用它。尝试将 item.id 更改为 item[i].id。这样,当 each 函数遍历数组时,它可以引用每个对象中的 id 字段。

编辑:这是工作代码。

$(document).ready(function (){

    var source = '[{"conto":"1"},{"id":"4","activity_id":"50","path":"Testo\/base.png","title":"Ffgf","descrizione":"Tttt"},{"id":"8","activity_id":"50","path":"Testo\/61FCFUX_IMG_0536.PNG","title":"Hggggg","descrizione":"Tgg"}]';
    source = JSON.parse(source);
    var cellcount = length(source);

    for(var i = 0; i < cellcount; i++){
        console.log(source[i].id);
    }

});

function length(obj) {
    return Object.keys(obj).length;
}

【讨论】:

  • OP 正在使用 jQuery 的 .each() 所以 item 将是实际的对象。 api.jquery.com/jquery.each。即使不是这样,它也是 item[i](数组/对象索引),而不是 item(i)(函数调用)。
  • @MagnusEriksson 正如您将从编辑后的答案中看到的那样,我添加了显示我在说什么的代码。在修复它之前,我只需要一分钟就可以搞定它。不要这么快就给别人投反对票。
  • @Daniel 不要担心投票失败。他们只是尝试提出建议,以便您即兴发挥。
  • 如果您发布的答案完全错误并且没有考虑到 OP 实际在做什么,它将被否决。这就是这个网站的运作方式。你应该做的是在点击“保存”按钮之前写一个正确的答案。我们不知道您是否打算稍后扩展它。
  • @MagnusEriksson 发布后可能要等几分钟。大多数人都会编辑他们的答案。您所做的只是投反对票而没有提供任何答案。这就是你所说的“这个网站如何运作”的意思吗?你错了,我发布了一个主题正确的答案,除了语法错误。让我休息一下,我每天都在使用十几种语言。
猜你喜欢
  • 2015-10-20
  • 2015-08-30
  • 1970-01-01
  • 1970-01-01
  • 2015-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-25
相关资源
最近更新 更多