返回的值为undefined

返回的值为undefined

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%  
String path=request.getContextPath();  
String basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>图书查询</title>

</head>
<body>
	<center>
		<h1>图书查询</h1>
		<p>
			图书ID:<input type="text" name="bookID">
			图书名:<input type="text" name="bookName">
			分类:<input type="text" name="catgoryName">
			<input type="submit" value="查询" id="search">
		</p>
		<hr>
		<table width="800px" cellspacing="0px" cellpadding="0px" border="1px">
			<thead>
				<tr>
					<th>图书ID</th>
					<th>书名</th>
					<th>分类</th>
					<th>价格</th>
					<th>描述</th>
				</tr>
			</thead>
			<tbody id="cont">
				<c:forEach var="m" items="${books}">
					<tr>
						<td>${m.id }</td>
						<td>${m.name }</td>
						<td>${m.classname }</td>
						<td>${m.price }</td>
						<td>${m.description }</td>
					</tr>
				</c:forEach>
			</tbody>
		</table>
	</center>
	<script type="text/javascript" src="<%=basePath%>js/jquery-3.3.1.js"></script>
<script type="text/javascript">
$("#search").click(function(){
    //单击查询按钮的时候触发ajax事件
    $.ajax({
        url:"<%=basePath%>SelectBookServlet" ,
        type:"post",
        data:{
            bookID:$("input[name=bookID]").val(),
            bookName:$("input[name=bookName]").val(),
            catgoryName:$("input[name=catgoryName]").val()
        },
        dataType:"json",
        success:function(result){//result里封装了servlet给ajax返回的结果                                         
              var list= eval(result);
              console.log(list);
              var s = null;
              for (var i in list){
                  var id = list[i].id;
                  var bookName = list[i].name;
                  var bookCategory = list[i].classname;
                  var price = list[i].price;
                  var description = list[i].description;
              s = s+ "<tr><td>" + id +"</td><td>"+bookName+"</td><td>"+bookCategory+"</td><td>"+price+"</td><td>"+
              description+ "</td></tr>";
              $("#cont>tr").remove();
              }
              $("#cont").html(s);
              }
    });
});
</script>
</body>
</html>

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

package wust.model;

public class Book {
	private String id;
	private String name;
	private String classname;
	private String price;
	private String description;
	public Book() {
	}
	public Book(String id, String name, String classname, String price, String description) {
		super();
		this.id = id;
		this.name = name;
		this.classname = classname;
		this.price = price;
		this.description = description;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getClassname() {
		return classname;
	}
	public void setClassname(String classname) {
		this.classname = classname;
	}
	public String getPrice() {
		return price;
	}
	public void setPrice(String price) {
		this.price = price;
	}
	public String getDescription() {
		return description;
	}
	public void setDescription(String description) {
		this.description = description;
	}
	@Override
	public String toString() {
		return "Book [id=" + id + ", name=" + name + ", classname=" + classname + ", price=" + price + ", description="
				+ description + "]";
	}
	
}
package wust.servlet;

import java.io.IOException;
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 org.json.JSONArray;

import wust.dao.LibDaoImpl;
import wust.model.Book;

/**
 * Servlet implementation class SelectBookServlet
 */
@WebServlet("/SelectBookServlet")
public class SelectBookServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public SelectBookServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		LibDaoImpl libdaoimpl=new LibDaoImpl();
		String bookID=request.getParameter("bookID");
		String bookName=request.getParameter("bookName");
		String catgoryName=request.getParameter("catgoryName");
		if(bookID==null&&bookName==null&&catgoryName==null) {
			List<Book> books=libdaoimpl.getBooksByCondition(null,null,null);
			request.setAttribute("books", books);
			request.getRequestDispatcher("/showBooks.jsp").forward(request, response);
		}
		else {
		List<Book> books=libdaoimpl.getBooksByCondition(bookID, bookName, catgoryName);
		JSONArray jsonArray = new JSONArray(books);
		System.out.println(jsonArray);
	    response.getOutputStream().write(jsonArray.toString().getBytes("utf-8"));		
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.setCharacterEncoding("utf-8");
		doGet(request, response);
	}

}

json能正确返回,但是显示是undefined。

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

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

2回答
好帮手慕阿莹 2019-02-26 10:01:38

老师用同学的代码测试着没有问题:

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

因为老师没有你的LibDaoImpl类,这里自己写了一个集合模拟查询结果。

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

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

建议同学试试自己写一个固定的集合,看看是否能读取出来呢?

老师测试的代码如下,同学也可以拿去试一下,如果这个没有问题,可能就是LibDaoImpl返回值的格式出了问题。建议同学检查一下。

package wust.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 org.json.JSONArray;
 

import wust.model.Book;
 
/**
 * Servlet implementation class SelectBookServlet
 */
@WebServlet("/SelectBookServlet")
public class SelectBookServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
        
    public SelectBookServlet() {
        
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      
        String bookID=request.getParameter("bookID");
        String bookName=request.getParameter("bookName");
        String catgoryName=request.getParameter("catgoryName");
        if(bookID==null&&bookName==null&&catgoryName==null) {
            List<Book> books=new ArrayList<Book>();
            Book book = new Book("1","2","3","4","5");
            Book book1 = new Book("你好","22","33","44","55");
            Book book2 = new Book("111","222","333","444","555");
            books.add(book);
            books.add(book1);
            books.add(book2);
            request.setAttribute("books", books);
            request.getRequestDispatcher("/showBooks.jsp").forward(request, response);
        }
        else {
        	 List<Book> books=new ArrayList<Book>();
             Book book = new Book("1","2","3","4","5");
             Book book1 = new Book("你好","22","33","44","55");
          
             books.add(book);
             books.add(book1);
        JSONArray jsonArray = new JSONArray(books);
        System.out.println(jsonArray);
        response.getOutputStream().write(jsonArray.toString().getBytes("utf-8"));       
        }
    }
 
    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        request.setCharacterEncoding("utf-8");
        doGet(request, response);
    }
 
}

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

  • 提问者 程研板 #1
    估计是包的问题,我换成了fastjson,这个就可以了
    2019-02-26 13:43:48
  • 好帮手慕阿莹 回复 提问者 程研板 #2
    好的,同学是解决了是吗?祝学习愉快。
    2019-02-26 14:31:19
好帮手慕阿满 2019-02-25 18:46:07

同学你好,json可以返回对象只是显示Undefined,表明获取值时出了问题。这里建议同学在success中添加不为0的判断,如:

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

另外建议同学在获取变量bookName和其他变量后,可以使用alert()弹出框,查看是否获取问题。

祝:学习愉快~

  • 提问者 程研板 #1
    老师,上面的代码中间我插入了一张图的。不知道您看见没……我有点怀疑这个图中的右边返回的json的格式会不会是错误的,Book 这个类我覆盖了输入函数的
    2019-02-25 19:00:43
  • 提问者 程研板 #2
    输出函数,上面写错了
    2019-02-25 19:01:27
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
从网页搭建入门Java Web2018版
  • 参与学习           人
  • 提交作业       1088    份
  • 解答问题       10205    个

如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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