如何使用 jQuery 显示来自 JSON 的多个数组?

Posted

技术标签:

【中文标题】如何使用 jQuery 显示来自 JSON 的多个数组?【英文标题】:How to display multiple array sourced from JSON using jQuery? 【发布时间】:2020-06-19 03:20:45 【问题描述】:

如何使用 jQuery 显示来自 API (JSON) 的多个数组?当前方法我正在使用each 函数,不幸的是结果不如预期。结果应该和继承的 JSON 一样。

当前结果:单独显示

预期结果:如下图所示,div 3 在 div 2 中,div 2 在 div 1 中。

HTML

<div class="container-fluid" id="projectDetail">

    <div class="row mt-3 view_result">
        // all the result will be display here
    </div>

</div>

JS

$(document).ready(function()
    var project = '';
    var L1 = '';
    var L2 = '';
    var L3 = '';

    $.ajax(
        url : url_project_detail,
        type : 'POST',
        dataType : 'json',
        data: "data",
        success: function(response)
            if (response.status == "Success")

                // Layer Project Name
                $.each(response.data, function(key, value)
                project = "<div class='text-danger card container'><span>"+value.project_name+" - </span>"
                $("#projectDetail .view_result").append(project);

                    // Layer MVP
                    $.each(value.l1_task, function(key, value)
                    L1 = "<div class='card bg-info pd-10 container'><span>"+value.l1_name+" Layer MVP - </span>"
                    $("#projectDetail .view_result").append(L1);

                        // Layer Sprint
                        $.each(value.l2_task, function(key, value)
                        L2 = "<div class='card bg-warning pd-20 container'><span>"+value.l2_name+" Layer Sprint - </span>"
                        $("#projectDetail .view_result").append(L2);

                            // Layer Task
                            $.each(value.l3_task, function(key, value)
                            L3 = "<div class='card bg-dark container'><span>"+value.l3_name+" Layer Task - </span>"+

                            "</div>" // for Layer Task
                            $("#projectDetail .view_result").append(L3);                            
                            );

                        var close = "</div>" // for Layer Sprint
                        $("#projectDetail .view_result").append(close);
                        );

                    var close = "</div>" // for Layer MVP
                    $("#projectDetail .view_result").append(close);
                    );

                var close = "</div>" // Layer Project Name
                $("#projectDetail .view_result").append(close);
                );
            
            else 
                // else
                        
        ,
        error: function(e)
            // error
        
    );
);

JSON


    "status": "Success",
    "data": [
        
            "project_id": "1",
            "project_name": " Project Name ",
            "l1_task": [
                
                    "l1_id": "1",
                    "l1_name": " MVP 1 ",
                    "l2_task": [
                        
                            "l2_id": "1",
                            "l2_name": " Sprint 1 ",
                            "l3_task": [
                                
                                    "l3_id": "1",
                                    "l3_name": " Sprint 1 Task  1"
                                ,
                                
                                    "l3_id": "1",
                                    "l3_name": " Sprint 1 Task 2 "
                                
                            ]
                        
                    ]
                ,
                
                    "l1_id": "1",
                    "l1_name": " MVP 2 ",
                    "l2_task": [
                        
                            "l2_id": "1",
                            "l2_name": " Sprint 1 ",
                            "l3_task": [
                                
                                    "l3_id": "1",
                                    "l3_name": " Sprint 1 Task  1"
                                ,
                                
                                    "l3_id": "1",
                                    "l3_name": " Sprint 1 Task 2 "
                                
                            ]
                        
                    ]
                

            ]
        

    ]

【问题讨论】:

你也可以添加css吗? 只使用标准引导 css。 【参考方案1】:

您只能使用一个变量,即:project 并在每个循环中使用 += 将您的 html 附加到该变量上,最后您可以将此 project 附加到您的 div 中。工作代码:

var response = 
  "status": "Success",
  "data": [
      "project_id": "1",
      "project_name": " Project Name ",
      "l1_task": [
          "l1_id": "1",
          "l1_name": " MVP 1 ",
          "l2_task": [
            "l2_id": "1",
            "l2_name": " Sprint 1 ",
            "l3_task": [
                "l3_id": "1",
                "l3_name": " Sprint 1 Task  1"
              ,
              
                "l3_id": "1",
                "l3_name": " Sprint 1 Task 2 "
              
            ]
          ]
        ,
        
          "l1_id": "1",
          "l1_name": " MVP 2 ",
          "l2_task": [
            "l2_id": "1",
            "l2_name": " Sprint 1 ",
            "l3_task": [
                "l3_id": "1",
                "l3_name": " Sprint 1 Task  1"
              ,
              
                "l3_id": "1",
                "l3_name": " Sprint 1 Task 2 "
              
            ]
          ]
        

      ]
    

  ]
;
if (response.status == "Success") 

  // Layer Project Name
  $.each(response.data, function(key, value) 
    project = "<div class='text-danger card container'><span>" + value.project_name + " - </span>";

    // Layer MVP
    $.each(value.l1_task, function(key, value) 
      project += "<div class='card bg-info pd-10 container'><span>" + value.l1_name + " Layer MVP - </span>";
      // Layer Sprint
      $.each(value.l2_task, function(key, value) 
        project += "<div class='card bg-warning pd-20 container'><span>" + value.l2_name + " Layer Sprint - </span>";
        // Layer Task
        $.each(value.l3_task, function(key, value) 
          project += "<div class='card bg-dark container'><span>" + value.l3_name + " Layer Task - </span>" +

            "</div>"; // for Layer Task
        );
        project += "</div>";
      );
      project += "</div>";
    );
    project += "</div>" // for Layer Sprint
    $("#projectDetail .view_result").append(project);

  );
 else 
  // else
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">

<!-- jQuery library -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

<!-- Popper JS -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>

<!-- Latest compiled javascript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"></script>

<div class="container-fluid" id="projectDetail">

  <div class="row mt-3 view_result">

  </div>

</div>

【讨论】:

非常感谢!你太棒了!......它的工作原理。为你点赞。 从您的回答中,我只想知道,我在上述情况下使用手风琴。那么点击MVP时如何通过ID进行区分呢?当前的问题是当我点击MVP 2 Layer MVP 时,MVP 1 将反映打开/关闭。每个MVP应该有不同的ID,对吗?如何让它更有活力?我你有个主意。 可能使用计数器并为每个MVP div 分配动态ID。

以上是关于如何使用 jQuery 显示来自 JSON 的多个数组?的主要内容,如果未能解决你的问题,请参考以下文章

使用循环在 HTML 中显示来自 jQuery.ajax 的 json 数据

使用 jquery 和 ajax 显示来自 mysql 的数据

使用来自外部 JSON 的 JQuery 的自动完成表单字段不起作用

如何使用多个 jquery 版本以便 ResponsiveSlides.js 工作?

jQuery Mobile 中来自 Wordpress JSON 的新闻页面

Google Geochart - 来自JSON数据的同一国家/地区多个值