jsonp和XMLHttpRequest用法异同,jsp+js+servlet+mysql
来源:互联网 发布:大数据搜索引擎技术 编辑:程序博客网 时间:2024/06/06 10:01
XMLHttpRequest版:
index.html:
<%@ 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> <input type="button" onclick="validate()" value="请求并解析JSON"> <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> </tr> <tr border="1"> <td>1</td> <td>1</td> <td>1</td> </tr> </table> <script type="text/javascript"> function validate(){ var div=document.getElementById("div"); var xmlhttp; var table=document.getElementById('table'); if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest(); } else { xmlhttp = new ActiveObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { var x = xmlhttp.responseText div.innerHTML = x; var sd = eval("(" + x + ")"); var arr = new Array(); var i = 0; for ( var a in sd.person) {//获取有几个person var count = 0;//计算person属性值的个数 i++; for ( var item in sd.person[a]) { count++; var p = sd.person[a][item];//得到属性值的内容 table.rows[i - 1].cells[count - 1].innerHTML = p;//把内容填向table表格 } } } } var url = "json"; xmlhttp.open("POST", url, false); xmlhttp.send(); } </script> </body> </body> </html>servlet:
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/xml;character=utf-8"); response.setHeader("Cache-Control", "no-cache"); try { //创建Person对象,保存数据,如果有数据库的话,此处数据应该为从数据库中取出 classManager cl = new classManager(); List<classes> list = new ArrayList<classes>(); 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(jb.toString()); /*此处可以用另一种方式将数据装入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(); } }
jsonp版本:
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>
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); 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()+")"); /*此处可以用另一种方式将数据装入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(); } }XML版本
json版本
可以看出new XMLHttpRequest().responseText返回的是一串特殊的字符串,需要调用eval将其封装为json对象,然后对对象数组进行操作
而jsonp返回的是一个object对象,个人认为这里是json上传为object对象,然后对对象数组进行操作
博主刚入门,见识不深,如有指教,欢迎补充。
0 0
- jsonp和XMLHttpRequest用法异同,jsp+js+servlet+mysql
- Java Servlet和JSP的异同
- XMLHttpRequest and jsp servlet
- Servlet与Jsp的异同
- servlet和filter的异同
- servlet和filter的异同
- oracle和mysql异同
- 一对一网页聊天 jsp+js+ajax+servlet+tomcat+mysql
- XMLHttpRequest VS. JSONP
- XMLHttpRequest VS. JSONP
- jsp servlet js
- Jsp + servlet + mysql 使用
- 3jsp+servlet+mysql
- (jsp 和 servlet功能篇) jsp+servlet+javaBean 实现分页代码(mysql 数据库)
- mysql,Struts Servlet 和 JSP 中解决中文问题
- ajax简单实例(js内产生xmlHttpRequest,它和servlet交互返回xml显示在页面)
- jsp+js+servlet批量删除
- xmlHttpRequest 用法。
- [leetCode刷题笔记]2017.04.10
- 实验:使用SharedPreferences实现QQ登录功能
- ES6 学习笔记
- js实现表单提交后不重新刷新当前页面,并停留在当前页面
- 容器中的modCount作用
- jsonp和XMLHttpRequest用法异同,jsp+js+servlet+mysql
- 优化 | MySQL全面快速优化参考
- PAT1025 反转链表
- SRM573 Div1
- OpenCV学习笔记(08):opencv3.2+cmake3.8+VS2013,编译opencv_contrib
- C语言写递归复制文件夹和文件
- 4月10日,MyThread,每日20行。
- Spring MVC 输出模型数据
- POJ3670Eating Together(LIS最长(非)上升(下降)子序列模板)