ajax返回un defined的问题。

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了。请问怎么解决呢

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

(图书ID前面的11是我再content的<td>后面加了一个11)

正在回答

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

4回答

1、因为JSON在传参时,会调用getter方法来获取数据的,这里的getter方法是根据你的属性名自动生成的,比如bookName属性,自动生成的getter方法是getBookName();如果你改为getbookName,JSON就找不到对应的getter方法,所以无法获取数据。

2、下图标记的地方即使解析JSONArray。

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

3、课程里用的是JSONObject,因为该作业传递是list集合,应该使用JSONArray来完成,而不是JSONObject,我们在教辅资料区有上传JSONArray的使用案例,如下图所示,同学可以参考一下,祝学习愉快~

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

好帮手慕阿满 2018-12-18 14:18:35

同学你好,我们会在作业中给同学具体解答,请同学等待。祝:学习愉快~

  • 提问者 持续学习 #1
    老师,是不是问题太难,快两天了都没批复完,以前你们当晚就批完了啊。要不直接给个100分
    2018-12-19 16:54:48
  • chrismorgen 回复 提问者 持续学习 #2
    你好同学,由于我们是按照时间顺序进行批复的,我们的作业会在三个工作日批复完成,刚与批复作业的老师进行沟通,你的作业已经批复完成,同学可以进行查看了,祝学习愉快~
    2018-12-19 19:16:45
  • 提问者 持续学习 回复 chrismorgen #3
    你好老师,作业批复我看完啦。现在程序修改后都能正常执行了。 不过有3个小问题。 1.为什么小写的getbookname和setbookname会出错呢?我其他地方调用的方法也是setbookname呀。(系统问题?get和set方法我都是用eclipse自动生成的) 2.批复的第4条说“因为你在前端页面使用的是解析JSONArray的方法来解析list集合的,所以应在后台应使用JSONArray来完成传参”,请问前端页面哪句是解析JSONArray的方法呢? 3.课程视频里后端用的JSONObject传输,如果后端不变,按照作业的情况,前端应该用什么办法来解析JSONObject呢?
    2018-12-19 20:30:46
提问者 持续学习 2018-12-18 10:44:23

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类里面就是这个呀~~

chrismorgen 2018-12-18 10:42:57

你好同学,如下图所示,你book类中的属性名是什么呢?下图标记的值要与你Book类中的属性名一一对应,祝学习愉快~

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

  • 提问者 持续学习 #1
    老师,传回的数据是List<Book>类型,Book里面的属性核实过很多遍,没有错误。
    2018-12-18 10:46:56
  • 提问者 持续学习 #2
    作业已经上传了- -麻烦老师帮忙看看哪里出了问题~
    2018-12-18 11:47:19
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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