ajax返回un defined的问题。
showBooks.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>图书查询</title>
<script type="text/javascript" src="/LibraryManagement/js/jquery-1.4.2.js"></script>
</head>
<body>
<center>
<h1>图书查询</h1>
<p>
<span id="nof"></span>
图书ID:<input type="text" name="bookID">
图书名:<input type="text" name="bookName">
分类:<input type="text" name="catgoryName">
<input type="submit" value="查询" id="search">
<script type="text/javascript">
$("#search").click(function(){
$.ajax({
url:"/LibraryManagement/searchServlet",
type:"post",
data:{
bookID:$("input[name=bookID]").val(),
bookName:$("input[name=bookName]").val(),
catgoryName:$("input[name=catgoryName]").val()
},
dataType:"json",
success:function(result){
var boo1 = eval(result);
var content=null;
for(var i in boo1){
var sbookid = boo1[i].bookid;
var sbookname = boo1[i].bookname;
var sbookcatgory = boo1[i].bookcatgory;
var sbookprice = boo1[i].bookprice;
var sbookdescription = boo1[i].bookdescription;
content = content+"<tr><td>11"+sbookid+"</td><td>"+sbookname+"</td><td>"+sbookcatgory+"</td><td>"+sbookprice+"</td><td>"+sbookdescription+"</td></tr>";
$("#cont>tr").remove();
}
$("#cont").html(content);
}
});
});
</script>
</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 items="${applicationScope.books}" var="boo">
<tr>
<td>${boo.bookid}</td>
<td>${boo.bookname}</td>
<td>${boo.bookcatgory}</td>
<td>${boo.bookprice}</td>
<td>${boo.bookdescription}</td>
</tr>
</c:forEach>
</tbody>
</table>
</center>
</body>
</html>
searchServlet.java
package com.qqfh.librarymanagement;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletContext;
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.JSONObject;
@WebServlet("/searchServlet")
public class searchServlet extends HttpServlet {
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");
List<Book> searchb = LibServiceImpl.searchbooks(bookID, bookName, catgoryName);
for(Book se:searchb) {
System.out.println(se);
}
System.out.println("test");
JSONObject jsonobject = new JSONObject(searchb);
response.getOutputStream().write(jsonobject.toString().getBytes("UTF-8"));
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
LibServiceImpl.java里的searchbooks方法
public static List<Book> searchbooks(String bookID,String bookName,String catgoryName) {
List<Book> search = new ArrayList<Book>();
List<Book> books = ldi.getBooks();
System.out.println("1:"+bookID);
for(Book b:books) {
search.add(b);
return search;
}
System.out.println("2:"+bookName);
System.out.println("3:"+catgoryName);
return books;
}
因为测试显示效果,我在让searchbooks()方法直接返回一条结果。在searchServlet里接收后能正常显示,但是传到jsp文件后,jsp就显示un defined了。请问怎么解决呢
(图书ID前面的11是我再content的<td>后面加了一个11)
正在回答
1、因为JSON在传参时,会调用getter方法来获取数据的,这里的getter方法是根据你的属性名自动生成的,比如bookName属性,自动生成的getter方法是getBookName();如果你改为getbookName,JSON就找不到对应的getter方法,所以无法获取数据。
2、下图标记的地方即使解析JSONArray。
3、课程里用的是JSONObject,因为该作业传递是list集合,应该使用JSONArray来完成,而不是JSONObject,我们在教辅资料区有上传JSONArray的使用案例,如下图所示,同学可以参考一下,祝学习愉快~
private String bookid;
private String bookname;
private String bookcatgory;
private String bookprice;
private String bookdescription;
public Book() {
super();
}
public Book(String bookid, String bookname, String bookcatgory, String bookprice, String bookdescription) {
super();
this.bookid = bookid;
this.bookname = bookname;
this.bookcatgory = bookcatgory;
this.bookprice = bookprice;
this.bookdescription = bookdescription;
}
book类里面就是这个呀~~
你好同学,如下图所示,你book类中的属性名是什么呢?下图标记的值要与你Book类中的属性名一一对应,祝学习愉快~
- 参与学习 人
- 提交作业 1088 份
- 解答问题 10204 个
如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星