就送序列化问题,以及ajax拼接字符串问题
ajax查询走通了,但序列化出了问题,如下图,还有就是拼字符串有没有什么方法,或者规律,简直zz
//ajxa 根据分类查询book信息 private void selectBook(HttpServletRequest request, HttpServletResponse response) throws IOException { //获取参数 String categoryName = request.getParameter("categoryName"); //调用业务层查询数据 List<Books> list = booksService.findBookByCategory(categoryName); System.out.println("selectBook : list : " + list); //将集合序列化为json对象 String json = JSON.toJSONString(list); System.out.println("selectBook : json : " + json); response.getWriter().println(json); }
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE html> <html> <head> <% String basePath = request.getScheme() + "://" +request.getServerName() + ":" +request.getServerPort() + request.getContextPath(); %> <meta charset="UTF-8"> <title>图书后台管理</title> <link rel="stylesheet" href="css/index.css"> <link rel="stylesheet" href="css/bootstrap.min.css"> <script type="text/javascript" src="<%=basePath%>/js/jquery-3.3.1.js"></script> </head> <body> <header> <div class="container"> <nav> <a href="<%=basePath%>/BooksServlet?method=showAllBooks" >图书信息管理</a> </nav> <nav> <a href="<%=basePath%>/CategoryServlet?method=showAllCategory" >分类管理</a> </nav> </div> </header> <section class="banner"> <div class="container"> <div> <h1>图书管理系统</h1> <p>图书信息管理</p> </div> </div> </section> <section class="main"> <div class="container"> <div class="form-group" style="float: right;"> <div class="col-sm-offset-2 col-sm-10"> <button id="searchContent" type="submit" class="btn btn-primary">查询</button> </div> </div> <div class="form-group" style="float: right;width: 300px;"> <div class="col-sm-8"> <input name="searchContent" class="form-control" id="search" placeholder="输入要查询的分类" style="width: 250px"> </div> </div> </div> <div class="container"> <table class="table table-striped"> <thead> <tr> <th>图书编号</th> <th>图书名称</th> <th>分类</th> <th>价格</th> <th>图书封面</th> <th>操作</th> </tr> </thead> <tbody> <c:forEach items="${bookList }" var="books"> <tr id="tr1"> <td>${books.bId }</td> <td>${books.bookName}</td> <td>${books.category.categoryName}</td> <td>¥${books.price}</td> <td><img src="${books.path}"></td> <td> <a href="<%=basePath%>/BooksServlet?method=toUpdateBook&bId=${books.bId}">修改</a> <a href="<%=basePath%>/BooksServlet?method=deleteBook&bId=${books.bId}">删除</a> </td> <!--在循环显示数据时,此处的book0001可以用EL表达式进行替换--> </tr> </c:forEach> </tbody> </table> </div> </section> <section class="page"> <div class="container"> <div id="fatie"> <a href="<%=basePath%>/BooksServlet?method=toAddBooks"><button>新建</button></a> </div> </div> </section> <footer> copy@慕课网 </footer> </body> <script type="text/javascript"> //判断字符是否为空的方法 function isEmpty(obj){ if(typeof obj == "undefined" || obj == null || obj == ""){ return true; }else{ return false; } } function myAjax(obj){ $.ajax({ "url" : "<%=basePath%>/BooksServlet", "data" : obj, "type" : "post", "dataType" : "json", "success" : function(json){ var content = ""; for(var i = 0;i < json.length;i ++){ content = content + "<tr>" + "<td>" + json[i].bId + "</td>" + "<td>" + json[i].bookName + "</td>" + "<td>" + json[i].category.categoryName + "</td>" + "<td>" + json[i].price + "</td>" + "<td><img src=" + json[i].path + "></td>" + "<td>" + "<a href=<%=basePath%>/BooksServlet?method=toUpdateBook&bId=json[i].bId>修改</a>" + "<a href=<%=basePath%>/BooksServlet?method=deleteBook&bId=json[i].bId>删除</a>" + "</td>" + "</tr>"; $("tbody>tr1").remove(); } $("tbody").html(content); } }); } $("#searchContent").click(function(){ var categoryName = $("input[name='searchContent']").val(); if(!isEmpty(categoryName)){ var obj1 = {"method" : "selectBook","categoryName" : categoryName} myAjax(obj1); } }); </script> </html>
7
收起
正在回答
2回答
同学你好。还是分开来说吧:
1、这个 "category":{"$ref":"$[0].category"}的出现并不是数据错误。而是FastJson的重复引用现象。在这里因为同学的两个categroy是同一个,就出现了$ref。
这个可以在解析时进行设置,改为
String json = JSON.toJSONString(list,SerializerFeature.DisableCircularReferenceDetect);
就不会出现$ref了。
2、在字符串拼接的时候:
1)"" 包裹后会被视为一个字符串对象,不会被JavaScript或者Java解析
2)加号+用来拼接字符串,所以+两边一定是字符串
3)在 "" 内如果要表达引号,可以使用 '' ,他们两者就像是父子关系。
4)<%= %>只要成对就好。在生成为页面之前,会被替换成对应的字符串,被拼入其中
例如:
html = html + "<h2>" + news.date + " " + news.source +"</h2>" html = html + "<option value='" + ch.code +"'>" + ch.name + "</option>"
至于修改和删除之间的位置问题,可以使用<br/>换行,也可以将a标签设置id或class属性,使用CSS来改变效果。
如果解答了同学的疑问,望采纳~
祝学习愉快~
2. 从网页搭建入门JavaWeb
- 参与学习 人
- 提交作业 676 份
- 解答问题 9666 个
本阶段将从前端网页搭建入手,到Java Web基础,前后端结合助你完成Java Web小白的蜕变!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星