Spring MVC 我想在div标签中显示来自JSON的数据

j5fpnvbx  于 2022-11-24  发布在  Spring
关注(0)|答案(1)|浏览(111)

我在从JSON获取数据以在html元素上显示时遇到了问题。我尝试了很多方法,但没有一种方法有效。这是我的代码:
我的应用程序

$(document).ready(function() {
  $(function() {
    switch (menu) {
      case 'sign in':
        $('#signin').addClass('active');
        break;

      case 'vendors':
        $('#vendors').addClass('active');
        break;

      case 'view passports':
        $('#listpassports').addClass('active');
        break;

      case 'contact':
        $('#contact').addClass('active');
        break;

      case 'home':
        $('#home').addClass('active');
        break;
    }
  });

  AOS.init({
      'duration': 1250
    }
  );

  var jsonUrl = '';

  if (window.categoryID == '') {
    jsonUrl = window.contextRoot + '/json/data/all/passbeers';
  } 
  else {
    jsonUrl = window.contextRoot + '/json/data/category/' + window.categoryID + '/passbeers';
  }
});

JSON控制器

package com.itconnect.lisboabeerpassport.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.itconnect.lisboabeerpassportbackend.dao.PassbeerDAO;
import com.itconnect.lisboabeerpassportbackend.dto.Passbeer;

@Controller
@RequestMapping("json/data")
public class JsonDataController 
{
  @Autowired
  private PassbeerDAO passbeerDAO;

  @RequestMapping("/all/passbeers")
  @ResponseBody
  public List < Passbeer > getAllPassbeer() {
    return passbeerDAO.listActivePassbeer();
  }

  @RequestMapping("/category/{id}/passbeers")
  @ResponseBody
  public List < Passbeer > getPassbeerByCategory(@PathVariable int id) {
    return passbeerDAO.listActivePassbeersByCategory(id);
  }
}

显示JSON数据的HTML页面

<div class="container">

  <%@include file="./shared/navbar.jsp"%>

    <c:if test="${userclickAllpassbeers == true}">
      <script>
        window.categoryID = '';
      </script>
    </c:if>

    <c:if test="${userclickSingleCategoryPassbeer == true}">
      <script>
        window.categoryID = '${category.id}';
      </script>
    </c:if>

    <div class="row">
      <div class="col-sm-12 text-center font-weight-normal">
        <h2 class="cat_">CATEGORIES</h2>
      </div>
    </div>

    <div class="row">
      <c:forEach items="${categories}" var="category">
        <div class="col-lg-2 col-sm-4 mb-4 mx-auto">
        
          <!-- Portfolio item 2-->
          
          <div class="portfolio-item">
            <img class="img-fluid" src="${contextRoot}/resources/img/${category.imageURL}" "
                        alt="... " />
            
                    </a>
          
            <div class="portfolio-caption ">
              <div class="portfolio-caption-heading ">
                <h5 class="card-title text-center ">
                  <a href="# " class="btn btn-primary "> ${category.name} PASS </a>
                </h5>
              </div>
            </div>
          </div>
        </div>
      </c:forEach>
      </div>
    
      <div class="row ">
        <div class="product-box col-md-4 ">
          <div class="product-inner-box position-relative ">
            <div class="icons position-absolute top-0 start-0 ">
              <a href="# " class="text-decoration-none "><i class="fa-solid fa-eye "></i></a>
            </div>
          
            <!-- end /icons -->
            <!-- end /icons -->
          
            <img src="${contextRoot}/resources/img/portugal-passport.png "/>
    
          <div class="cart-btn ">
              <button class="btn btn-success shadow-sm "><i class="fa-solid fa-cart-shopping "></i>Add to cart</button>
            </div>
          
            <!-- end /cart-btn -->
          
          </div>
        
          <!-- end /product-inner-box -->
    
          <div class="product-info ">
            <div class="product-name ">
              <spam>Premium Passport</spam>
            </div>
    
          <!-- end product name -->
    
            <div class="product-price ">
              $<spam>13</spam>
            </div>
            
          <!-- end product price -->
          
          </div>
          
        <!-- end product-info -->
        
        </div>
        
      <!-- end product-box  -->
      
      </div>
    
      <!-- end div show passports -->
    
      <div class="row ">
        <div class="col-lg-12 ">
          <div id="passbeerimage "></div>
        </div>
      </div>
  </div>

我为此需要帮助却找不到办法。
我试着用

$.ajax({  dataType: "json",  url: url,  data: data,  success: success});

但我希望获得JSON数据并将其显示在html标记上的工作方式

yuvru6vn

yuvru6vn1#

我有一个解决方案,如何获得JSON数据,然后通过使用Vanilla JS更新为HTML元素,然后我做了自己的例子作为您的参考,请遵循以下步骤
1.创建名为 index.html的HTML文件

<!DOCTYPE html>
<html>
<body>
<div id="root">
    <p id="name">
        Name: {name}
    </p>
    <p id="birthdate">
        Birthdate:  {birthdate}
    </p>
    <p id="age">
        Age: {age}
    </p>
    <p id="address">
        Location: {location}
    </p>
</div>
<script src="parser.js" type="text/javascript"></script>
</body>
</html>

2.然后创建名为 parser.js的JavaScript文件

// Initialize the headers
let init = {
    method: "GET",
    headers: {
        "Content-Type": "application/json"
    },
    mode: "cors",
    cache: "default"
};

let parseJSON = new Request("data.json", init);

// Use Fetch() API to get JSON data and update to the HTML element.
fetch(parseJSON).then((response) => {
return response.json();
}).then((data) => {
    let name = document.querySelector("#name");
    let birthdate = document.querySelector("#birthdate");
    let age = document.querySelector("#age");
    let adddress = document.querySelector("#location");

    name.textContent = `Name: ${data.name}`;
    birthdate.textContent = `Birthdate: ${data.birthdate}`;
    age.textContent = `Age: ${data.age}`;
    address.textContent = `Location: ${data.address}`;
});

3.最后创建名为 * data.json*的JSON文件

{
    "name": "Yer",
    "birthdate": "January 1, 2003",
    "age": "19",
    "address": "Philippines"
}

相关问题