【问题标题】:getjson and .each() function. Need to search/loop on 2nd levelgetjson 和 .each() 函数。需要在第二级搜索/循环
【发布时间】:2014-09-17 06:30:28
【问题描述】:

以下脚本返回 2 个警报(F3 和 S1)。 我需要 4 个警报(F1、F2、F3 和 S1)——这是所有服务的主机名。

我猜每个函数都在创建一个不包含双峰的数组 - 所以它只给我一个 - 最后一个 F3。

如何获得所有服务的host_names?我无法更改输入数据。

脚本:

 <script>
    $(function () {
        var status = [];
        $.ajaxSetup({
            cache: false
        });
        $.getJSON('status.php', function (data) {
            $.each(data.services, function (i, f) {
                alert(f.host_name);
            });
        });
    });
</script>

来自 status.php 的输出:

{
"hosts": {
   "modified_host": "0",
   "modified_serv": "0"
},
"services": {
  "HTTPS": {
      "host_name": "F1",
      "service_description": "HTTPS"
  },
  "HTTPS": {
      "host_name": "F2",
      "service_description": "HTTPS"
  },
  "HTTPS": {
      "host_name": "F3",
      "service_description": "HTTPS"
  },
  "HTTP": {
      "host_name": "S1",
      "service_description": "HTTP"
  }
}
}

【问题讨论】:

  • 服务应该存储为一个数组。像在您的代码中一样存储,您最终将只得到 2 项服务,其中密钥为 HTTPS(仅声明的最后一项)和 HTTP
  • 我觉得可以帮到你:stackoverflow.com/questions/5306741/…

标签: javascript getjson each


【解决方案1】:

在同一级别的 JSON 字符串中不能有多个相同的索引。例如:尝试JSONLint你的字符串,你会得到:

{
    "hosts": {
        "modified_host": "0",
        "modified_serv": "0"
    },
    "services": {
        "HTTPS": {
            "host_name": "F3",
            "service_description": "HTTPS"
        },
        "HTTP": {
            "host_name": "S1",
            "service_description": "HTTP"
        }
    }
}

这就是 JSON.parse()——被 $.getJSON 调用(我猜)——返回的结果。

您的status.php 需要为“服务”返回一个数组:

  "services": [{
      "host_name"          : "F1",
      "service_description": "HTTPS"
    }, {
      "host_name"          : "F2",
      "service_description": "HTTPS"
    }, {
      "host_name"          : "F3",
      "service_description": "HTTPS"
    }, {
      "host_name"          : "S1",
      "service_description": "HTTP"
    }
  ]

【讨论】:

  • 我想的一模一样,但是正如作者所说:他不能改变输入数据(status.php的输出)...
  • 感谢您的回答。我猜看起来不太好。调用getJson函数时有没有办法操作数据?就像为所有服务名称添加一个计数器,以使它们最终成为数组中的唯一名称?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-22
  • 2012-12-13
  • 2016-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多