ajax 无法获取json数据

ajax 无法获取json数据

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>



<!DOCTYPE html>

<html>

<head>

<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="js/jquery-3.4.1.js">  </script>

<script type="text/javascript">


           $(function(){

           $("#searchbtn").click(function(){

                   var searchContent=$("#searchContent").val();

                   $.ajax({

               "url":"/homeworkregist_login/SearchBookByIDServlet",

               "type":"get",

               "data":{"searchContent":searchContent},

               "dataType":"json",

               "success":function(json){

               console.log(json);

               }

                  

               })

           

           })

           })

 

     </script>


</head>


<body>

<header>

<div class="container">

<nav>

<a href="bookList.jsp">图书信息管理</a>

</nav>

<nav>

<a href="categoryList.jsp">分类管理</a>

</nav>


</div>

</header>

<section class="banner">

<div class="container">

<div>

<h1>图书管理系统</h1>

<p>图书信息管理</p>

</div>

</div>

</section>

<section class="main">



<div class="container">

<form class="form-horizontal" action="" method="">

<div class="form-group" style="float: right;">

<div class="col-sm-offset-2 col-sm-10">

<button type="submit" id="searchbtn" class="btn btn-primary">查询</button>

&nbsp;&nbsp;&nbsp;

</div>

</div>

<div class="form-group" style="float: right; width: 300px;">

<div class="col-sm-8">

<input name="searchContent" class="form-control"

id="searchContent" placeholder="输入要查询的分类" style="width: 250px">

</div>

</div>



</form>

</div>

<div class="container">


<table class="table table-striped">

<thead>

<tr>

<th>序号</th>

<th>图书编号</th>

<th>图书名称</th>

<th>分类</th>

<th>价格</th>

<th>图书封面</th>

<th>操作</th>


</tr>

</thead>

<tbody>

<c:forEach items="${bookList }" var="book" varStatus="idx">

<tr id="tr1">

<td>${ide.index+1}</td>

<td>${book.bookId }</td>

<td>${book.bookName }</td>

<td>${book.category }</td>

<td>¥<fmt:formatNumber value="${book.price}" pattern="0.00"></fmt:formatNumber></td>

<td><img src="${book.path}"></td>

<td><a

href="${pageContext.request.contextPath}/UpdateBookList?bookId=${book.bookId}">修改</a>

<a

href="${pageContext.request.contextPath}/DelBookServlet?bookId=${book.bookId}">删除</a>


</td>

<!--在循环显示数据时,此处的book0001可以用EL表达式进行替换-->


</tr>

</c:forEach>

</tbody>

</table>

</div>

</section>

<section class="page">

<div class="container">

<div id="fatie">

<a href="addBook.jsp"><button>新建</button></a>

</div>

</div>

</section>

<footer> copy@慕课网 </footer>

</body>

</html>


package com.imooc.web.servlet;


import java.io.IOException;

import java.util.ArrayList;

import java.util.List;


import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import com.alibaba.fastjson.JSON;

import com.imooc.web.model.Book;

import com.imooc.web.service.BookService;

import com.imooc.web.service.BookServiceImpl;


/**

 * Servlet implementation class SearchBookByIDServlet

 */

@WebServlet("/SearchBookByIDServlet")

public class SearchBookByIDServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

       

   

    public SearchBookByIDServlet() {

        super();

        

    }


protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//获取参数searchContent内容

String searchContent=request.getParameter("searchContent");

//新建List对象

List list=new ArrayList();

//if(searchContent.substring(0, 4).equals("book")) {}

//如果参数是以book开头,说明参数是图书ID号,否则视为图书名

BookService bookservice=new BookServiceImpl();

//调用getBooksByCondition查询方法

   Book book=bookservice.getBooksByCondition(searchContent);

   

   list.add(book);

    String json=JSON.toJSONString(list);

response.getWriter().println(json);

}


protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doGet(request, response);

}


}


(1)BookList.jsp上的查询功能和添加了SearchBookByIDServlet,点击查询 按钮后出现 错误,无法接收数据

(2)请问后面接收到json数据后如何在页面显示出来呢,课程里的内容是告诉在空白页面显示,而目前的bookList.jsp 已经存在内容了,如何在已经有内容的网页显示接收到的json数据。请老师提供下思路和方法。谢谢

(3)其他代码请看我上个问题提供的代码 

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小班 2020-02-18 11:07:04

同学你好,1、点击查询 按钮后出现 错误

    这里查看同学贴出代码,在BookList.jsp中,并没有出现无法接受数据的字样,但是没有没有正常接收到数据。检查代码,查询按钮注意需要是button按钮,而不能是submit,submit会在提交后刷新页面,所以建议在查询按钮中不要使用submit

http://img1.sycdn.imooc.com//climg/5e4b536409e0a7b709310437.jpg

    2、在ajax中,我们是通过js代码来接收和处理参数的。js代码中的变量json也是一个集合。通过json[i]可以指代每一次循环中的那个book,所以我们可以使用json[i].bookId拿到当前book对象的id值,例如:

"success":function(json){
                    var content="";
                    for(var i=0;i<json.length;i++){
                        content=content+"<tr><td>"+(i+1)
                                +"</td><td>"+json[i].bookId
                                +"</td><td>"+json[i].bookname
                                +"</td><td>"+json[i].bookCategory
                                +"</td><td>¥"+json[i].price
                                +"</td><td><img src='img/"+json[i].bookCover+"'>"
                                +"</td><td><a href='${pageContext.request.contextPath }/updateBook.jsp?bookId="+json[i].bookId+"'>修改</a><a href='/deleteBook?bookId="+json[i].bookId+"'>删除</a>"
                                +"</td></tr>";
                        $("cont>tr").remove();
                    }
                    $("#cont").html(content);
                }

如上所示,是老师写的小例子,同学可以根据自己的具体属性名称以及标签名来书写自己具体的ajax展示内容。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 为什么在for循环中调用$("cont>tr").remove();那不是内容还没显示就被移除了吗?
    2020-03-20 12:02:09
  • 同学你好,1、$("cont>tr").remove();是移除之前页面中的已经存在的表格内容。2、在循环中拼接的数据完成后,循环外再执行--》$("#cont").html(content); 数据写入页面中的操作。 综上所述,$("cont>tr").remove()将数据移除,并不会影响循环执行完后的$("#cont").html(content); 数据写入。 如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
    2020-03-20 17:43:33
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师