关于 JSONArray带回来的list的问题

关于 JSONArray带回来的list的问题

老师我在查询图书中如果只是输入类别的话应该将所有该类别的书都显示出来对吧

但是在servlet中确认的一个books的list中装上所有同一个类别的所有书为什么用了

 JSONArray jsonarray=new JSONArray(books);

response.getOutputStream().write(jsonarray.toString().getBytes("utf-8"));

之后带回来的数据中只会显示一本书的内容呢?

附上servlet代码

package com.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 org.json.JSONObject;

import com.book.Book;
import com.lib.Lib;

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

	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Lib lib=new Lib();
		String bookid=request.getParameter("bookID");
		String bookname=request.getParameter("bookName");
		String catgoryName=request.getParameter("catgoryName");
		
		List<Book>books =lib.getBooksByCondition(bookid, bookname, catgoryName);
		System.out.println("开始对servlet中的books进行验证");
		
		for(Book book:books){
			System.out.println(book.getBookname());
		}
		 JSONArray jsonarray=new JSONArray(books);
		 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
		doGet(request, response);
	}

}

已经确认books中书的数量没有问题了

然后是jsp中的代码

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"  import="com.lib.*,com.book.*"  %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>图书查询</title>
<script type="text/javascript"   src="/web_homework2/resources/js/jquery-1.4.2.js"></script>
</head>
<body>
	<center>
		<h1>图书查询</h1>
		<p>
			图书ID:<input type="text" name="bookID">
			图书名:<input type="text" name="bookName">
			分类:<input type="text" name="catgoryName">
			<input type="button" 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">
			<%Lib lib=new Lib(); %>
			<!-- 用ajax做动态新 -->
					<tr>
						<td></td>
						<td></td>
						<td></td>
						<td></td>
						<td></td>
					</tr>
				
			</tbody>
		</table>
	</center>
	
</body>


<script  type="text/javascript"  >

$("#search").click(function(){
//var search=document.getElementById("search");
	$.ajax({
		url:"/web_homework2/showbookservelet",	
		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);
           var content=null;
           if(list!=null){
        	   for(var i in list){
        		   var id=list[i].id;
        		   <%   
        		       System.out.println("===========");%>
        		   var bookName=list[i].bookname;
        		
        		   var catgoryName=list[i].bookclass;
        		  
        		   var price =list[i].bookprice;
        		   console.log(price);
        		   var description=list[i].bookdedescription;
        		   console.log(description);
        		  content=content+"</tr><td>"+id+"</td><td>"+
        		   bookName+"</td><td>"+catgoryName+"</td><td>"+
        		   price+"</td><td>"+description+"</td></tr>";
        		  $("#cont>tr").remove();
        	     }
        	     $("#cont").html(content);
        	   }
           }
	} )
})
	



</script>



</html>

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

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

明明后端带来的books中有两本书啊

为什么传到前面后就只有一本了呢?

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

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

2回答
提问者 我叫飞天德 2018-12-13 17:26:21

从新发一下

for(var i in list){
           var id=list[i].id;
           <%   
               System.out.println("===========");%>
           var bookName=list[i].bookname;
       
           var catgoryName=list[i].bookclass;
          
           var price =list[i].bookprice;
           console.log(price);
           var description=list[i].bookdedescription;
           console.log(description);
          content=content+"</tr><td>"+id+"</td><td>"+
           bookName+"</td><td>"+catgoryName+"</td><td>"+
           price+"</td><td>"+description+"</td></tr>";
          $("#cont>tr").remove();
           }

 

for里面只有这些吗


  • 同学你好,同学的问题解决了吗?将大括号移到最后对应的是if(list!=null)的大括号。祝:学习愉快!
    2018-12-13 18:23:57
  • 提问者 我叫飞天德 回复 好帮手慕阿满 #2
    那样会报错啊= =,应为那是if(list!=null)的大括号如果移到最后,应该是直接移到点击事件的最外面了= =,我再想会不会是因为$("#cont").html(content);没有加到for循环的里面呢?
    2018-12-13 20:13:13
  • 好帮手慕阿满 回复 提问者 我叫飞天德 #3
    同学你好,同学将if(list!=null)的判断去掉在试试。祝:学习愉快!
    2018-12-14 09:41:14
好帮手慕阿满 2018-12-13 17:00:30

同学你好,在jsp页面中接收返回值时的代码有些问题,将 $("#cont").html(content);后的一个大括号放在最后,“})”后应该有分号";",如图:

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

同学修改一下再试试。

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

  • 提问者 我叫飞天德 #1
    老师好像不对啊,老师的意思是说for循环里面只有 for(var i in list){ var id=list[i].id; <% System.out.println("===========");%> var bookName=list[i].bookname; var catgoryName=list[i].bookclass; var price =list[i].bookprice; console.log(price); var description=list[i].bookdedescription; console.log(description); content=content+"</tr><td>"+id+"</td><td>"+ bookName+"</td><td>"+catgoryName+"</td><td>"+ price+"</td><td>"+description+"</td></tr>"; $("#cont>tr").remove(); } 这些吗
    2018-12-13 17:25:29
  • 提问者 我叫飞天德 #2
    老师最后面一个})应该就是最外层的了就是那个点击事件匹配的括号了
    2018-12-13 17:28:15
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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