controller能接收到数据有数据但是前端无法显示数据

又是制作系统时遇到的问题。只是想做个查询商品的页面,结果弄了一天,在网上各种查问题,各种解决办法用在我的代码上,换了无数种关键词搜索终于找到了一条成功解决了问题。


问题描述:

事情是这样的:我要写一个通过商品名称模糊查询商品的代码,然后根据老师给的代码改吧改吧,搜索框部分变成下面这样:

<form>
    <input type="text" id="productNameInput" placeholder="请输入要查询的商品名称">
    <button id="queryButton" type="submit">查询</button>
</form>

script部分变成下面这样

<script>
  $(document).ready(function () {
    // 监听查询按钮的点击事件
    $("#queryButton").click(function () {
      // 获取用户输入的商品名
      var productName = $("#productNameInput").val();

      // 构建查询的URL
      var queryUrl = "${pageContext.request.contextPath}/selectProductList?productName=" + productName;

      // 发送GET请求到后端
      $.get(queryUrl, function (data) {
        var tbody = document.querySelector("body");

        // 清空原有内容
        tbody.innerHTML = "";

        // 遍历返回的商品列表
        data.forEach(function (product) {
          var f = document.createElement("form");
          f.method = "POST";
          f.style = "width: 600px";
          // 循环遍历对象
          for (var key in product) {
            console.log(key)
            //创建div标签
            var div = document.createElement("div");
            div.style = "text-align:center;margin:1px;border:1px solid black;float: left;width:24%;height: 25px;";
            //向div标签里插入内容
            div.innerText = product[key];

            var input = document.createElement("input");
            input.name = key;
            input.value = product[key];
            input.type = "hidden";
            div.appendChild(input);
            //向form标签里插入div标签(有内容)
            f.appendChild(div);
          }
          //创建div标签
          var div = document.createElement("div");
          div.style = "text-align:center;margin:1px;border:1px solid black;float: left;width:24%;height: 25px;";
          var input = document.createElement("input");
          input.type = "submit";
          input.onclick = function () {
            alert("成功加入购物车!");
          };
          input.value = "加入购物车";
          div.appendChild(input);
          f.appendChild(div);
          tbody.appendChild(f);
        });
      });
    });
  });
</script>

 controller部分是下面这样:


    @ResponseBody
    @RequestMapping(value = "/selectProductList")
    public List<Product> selectProductList(@RequestParam String productName) throws Exception {
        System.out.println(productName);//我加上去用来在控制台显示收到的前端传来的商品名字的
        List<Product> productList=sqlSession.selectList("mapper.productMapper.findProductByName",productName);
        System.out.println(productList);//在控制台显示从数据库获取的商品列表
        return productList;//返回列表
    }

然后呢,就是怎么都无法实现前端的页面显示。可是控制台输出就是有数据的。

像下面这样:

可是在前端浏览器,我的输入,我的提交请求就好像没有用,它只是在浏览器的地址栏多了个问号,像下面这样:


解决办法: 

这个问题呢就是,这里按钮是js代码进行处理提交的,只是调用js代码,没做其他处理。

原来button默认的type是submit的,一旦在form中出现,点击后会进行一次提交,(就像我的代码里面的button中type=submit)因为是个空表单,那么症状就是浏览器地址栏里面的链接多了个问号,造成二次提交。

解决方法就是在按钮的js代码中加return false;

然后查询就可以成功了!


历经重重困难终于解决问题。太不容易了呜呜呜


如果这篇文章对你有帮助,欢迎点赞收藏^_^

加油加油!!!

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个非常流行的Java开发框架,它非常适合用于构建微服务架构。在这个框架中,我们通常采用MVC设计模式,即Model-View-Controller的设计思想,我们通常采用MySQL数据库存储数据,通过JPA或mybatis实现数据访问,而在前端页面显示上,我们则通常采用Thymeleaf或者Vue.js等前端框架。 如果我们想要从后端获取数据并将其显示前端,我们需要按照以下步骤来实现: 1.在Controller中,定义一个@RequestMapping用于接收前端请求,我们可以通过@RequestParam注解获取前端请求的参数。 2.在Service中,我们可以定义一个查询方法,通过JPA或mybatis查询数据库中的数据。 3.将Service中的数据传递到Controller。 4.在Controller中,我们可以通过ModelAndView对象将数据传递到前端页面。 5.在前端页面中,通过Thymeleaf或Vue.js等模板引擎将数据渲染到页面上。 在以上步骤中,我们需要注意以下几点: 1.需要确保Controller和Service中注入的对象传递正确。 2.需要保证查询方法的正确性,在多对多等复杂情况下可能需要根据业务需求编写自己的查询语句。 3.需要确保Thymeleaf或Vue.js正确渲染数据页面上,特别是在前端页面中调用后端接口的情况下,需要注意跨域问题的处理。 总之,通过Spring Boot框架获取数据并将其显示前端并不是一件困难的事情,只要我们按照以上步骤去做,就能实现前后端的无缝衔接和良好的用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值