关于html+js+servlet中用jsonp回调进不了回调函数的问题

今天在用jsonp回调数据库操作返回的list封装成的json数据时,发现一直进不了回调函数,后面发现是servlet中没有把callback的内容封装进json,还是没有认真看底层代码的原因。

下面贴上代码:

servlet:

package cn.edu.control;

import java.util.List;
import java.io.Console;
import java.io.IOException;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.edu.Object.classes;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

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

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
    public void doGet(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
  
        doPost(request, response);  
    }  
  
    public void doPost(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
          
        response.setContentType("text/json;character=utf-8");   
        try {  
            //创建Person对象,保存数据,如果有数据库的话,此处数据应该为从数据库中取出  
           classManager cl = new classManager();
           List<classes> list = new ArrayList<classes>();
           String callback = request.getParameter("callback"); 
           cl.showClass(list);//数据库操作返回一个list对象数组
            try {
                //创建JsonArray对象,JSONArray则是[]包裹起来的一个数组(Array),此处调用方法将对象集合装入  
                JSONArray json = JSONArray.fromObject(list);  
                //JSONObject是一个{}包裹起来的一个对象(Object),此处希望以对象为单位进行操作,所以创建JSONObject对象  
                JSONObject jb = new JSONObject();  
                //将jsonArray对象装入  
                jb.put("person", json);  
                //输出Json数据,它就是一种特殊格式的字符串  
                response.getWriter().write(callback+"("+jb.toString()+")");  //这一步是关键少了callbcak就找不到回调函数
                  
                /*此处可以用另一种方式将数据装入Json,同样可以,只是前台接受的是JSONArray对象,是[]包裹起来的一个数组(Array) 
                 *JSONArray jsonArray = new JSONArray(); 
                 *JSONObject jb = new JSONObject(); 
                 *jb.put("person", json); 
                 *jsonArray.add(jb); 
                 *response.getWriter().write(jsonArray.toString()); 
                 */  
                  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
}  
index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
<%  
    String path = request.getContextPath();  
    String basePath = request.getScheme() + "://"  
            + request.getServerName() + ":" + request.getServerPort()  
            + path + "/";  
%>  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html>  
<head>  
<base href="<%=basePath%>">  
  
<title>My JSP 'index.jsp' starting page</title>  
<meta http-equiv="pragma" content="no-cache">  
<meta http-equiv="cache-control" content="no-cache">  
<meta http-equiv="expires" content="0">  
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
<meta http-equiv="description" content="This is my page">  
<!-- 
    <link rel="stylesheet" type="text/css" href="styles.css"> 
    -->  
</head>  
  
<body>    
    <div id="div"></div>  
    <table border="1" style="width:300px;height:200px;" id="table">  
        <tr id="tr" border="1">  
            <td>1</td>  
            <td>1</td>  
            <td>1</td>
            <td>1</td>  
        </tr>  
  
        <tr border="1">  
            <td>1</td>  
            <td>1</td>  
            <td>1</td> 
            <td>1</td> 
        </tr>  
    </table>  
    <script type="text/javascript">  
    console.log("aaaaa");
     function validate(sa){  
     console.log("aa");
     var div=document.getElementById("div");  
  
     var table=document.getElementById("table");  
 
                div.innerHTML = sa; 
                var i = 0;  
                for ( var a in sa.person) {//获取有几个person  
                    var count = 0;//计算person属性值的个数  
                    i++;  
                    for ( var item in sa.person[a]) {  
                        count++;  
                        var p = sa.person[a][item];//得到属性值的内容  
                        table.rows[i - 1].cells[count - 1].innerHTML = p;//把内容填向table表格  
                    }  
                }  
    }  
</script>  
<script  src="json?callback=validate"></script>  
</body>  
</html>  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值