您的位置:首页 > Web前端 > JavaScript

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

2017-04-10 21:12 471 查看
今天在用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">  

        <t
4000
r 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>  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: