`
Luob.
  • 浏览: 1589847 次
  • 来自: 上海
社区版块
存档分类
最新评论

XMLhttpRequest 请求 XML,JSON ,POJO 数据

阅读更多
在使用XMlhttpRequest对象发送请求和响应之前,必须首先使用javaScript对象创建一个XMLHttpRquest对象。
var xmlhttp;
function getXMLHttpRequest(){
  if(window.ActiveXObject){
    xmlhttp:new ActiveXObject("Microsoft.XMLHTTP");
   }
  else if(window.XMLHTTPrequest){
    xmlHttp=new XMLHttpRequest();
  }
}

XMLHttpRequest 对象的方法

abort() 该方法哟用于取消当前的请求。

getAllREsponseHeaders(); 用于获取响应的所有HTTP头部。

getResponseHeaders().从响应信息中获取指定的HTTp头,其使用格式如下:String getResponseHeader(String header);

open():用于创建一个新的Http请求,并指定次请求的方法,URL以及验证消息。其使用格式如下:
  void open(String method,String url,boolean asynch,String userName ,String password)

send():用于发送请求到HTTP服务器并接受回应,其格式如下:void send(String content)

setRequestHeader() 用于单独指定求的某个http头,其使用格式如下 void setRequestHeader(String header,String value);

onreadyStateChange:该树形用于指定readState树形改变时的事件处理函数,当服务器返回数据到客户端时,需要相印的JavaScript函数去处理这些数据。

responseBody:将响应信息正文以 u;nsigned byte 数组形式返回。

responseText:将响应系响应作为字符串返回

responseXML:将响应信息作为XML Document对象返回。

readState:返回当前请求的状态,有5个可取值,分别为
   0:为初始化,即对象已建立,但是尚未初始化,(尚未调用open())
   1:表示正在加载,此时对象已建立,尚未调用 send()
   2:表示已加载,即已骠勇send()方法,但是当前状态及Http头未知
   3:表示交互中,此时已接受部分数据,因为响应及Http头不全,这时通过responseBody和responseText:获取部分参数会出现错误。
  4:表示完成,即数据接受完毕,此时可以通过responseBody和responseText获取完整的回应数据。

status:返回当前请求的HTTP状态码:例如 200对应OK 404:对应Not Found,该属性仅在readyState属性值为 3或者 4有效。

statusText:返回当前请求的响应行状态,例如Ok NotFound。该属性仅在readyState属性值为 3 或者 4时有效。



--------XMLHttpRequest---------------
示例1:
创建javaweb工程
index.jsp
</head>
  <%
  	Date now=new Date();
  %>
  <body>
    <center>
    <h3>当前时间为:<%=now %></h3>
    <hr/>
            点击歌名看歌词
    <input type="button" value="浪子心声" onclick="getLyrice('lzxs')"/>
    <input type="button" value="暗里着迷" onclick="getLyrice('alzm')"/>
    <br/><br/>
    <span id="showLyrice">
    	暂时还没有选择歌曲!
    </span>
    </center>
    <script type="text/javascript">
    	var xmlhttp;
    	function getXMLHttpRequest(){
	    	if(window.XMLHttpRequest){  //注意这里 XMLHttpRequest  不是大写的 "HTTP"
		        //针对FireFox,Mozilla,Opera,Safari,IE7,IE8
		        xmlhttp=new XMLHttpRequest();
		        //针对某些特定的版本的mozilla浏览器的BUG进行修正
		        if(xmlhttp.overrideMimeType){
		            xmlhttp.overrideMimeType("text/html");
		        }
	   		 }else if(window.ActiveXObject){
		        //针对 IE6 IE5.5 IE5
		        //两个可以创建XMLHTTPRequest对象额控件名称保存在js数据中
		        var activexName=["MSXML2.XMLHTTP","Microsoft.XMLHTTP"];
		        for(var i=0;i<activexName.length;i++){
		            try{
		                //取出控件名称进行创建,如果创建成功终止循环
		                //如果创建失败,抛出异常,然后可以继续循环,继续尝试
		                xmlhttp=new ActiveXObject(activexName[i]);
		                break;
		            }catch(e){
		
		            }
		        }
		    }
		    //确认XMLHTTPRequest对象创建成功
		    if(!xmlhttp){
		        alert("XMLHttpRequest对象创建失败!");
		        return;
		    }
    	}
    	function getLyrice(songName){
    		getXMLHttpRequest();
    		
    		xmlhttp.open("GET","data.jsp?songName="+songName,true);
    		xmlhttp.onreadystatechange=returnLyrice;
    		xmlhttp.send(null);
    	}
    	//回调函数
    	function returnLyrice(){
    		if(xmlhttp.readyState==4){
    			var lyrics=xmlhttp.responseText;
    			document.getElementById("showLyrice").innerHTML=lyrics;
    		}
    	}
    </script>
  </body>


data.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

String songName=request.getParameter("songName");
if("lzxs".equals(songName)){
	out.println("<br/>");
	out.println("<font size='5' color='red'>浪子心声</font><br/>");
	out.println("<font size='2'>刘德华</font><br/>");
}
else if("alzm".equals(songName)){
	out.println("<br/>");
	out.println("<font size='5' color='red'>暗里着迷</font><br/>");
	out.println("<font size='2'>刘德华</font><br/>");
}
%>


--------------XML 数据载体--------------
menu.jsp
<body>
    <h3>级联菜单</h3>
	选择省份:
	<select name="provinces" id="provincesID" onchange="getCities()">
		<option value="">=选择身份=</option>
		<option value="zj">浙江</option>
		<option value="gd">广东</option>
	</select>
	选择城市:
	<select name="cities" id="citiesID">
		<option value="">=选择城市=</option>
	</select>
	<script type="text/javascript">
	 var xmlhttp;
	 function getCities(){
		 var province=document.getElementById("provincesID").value;
		 getXMLHttpRequest();
		 xmlhttp.open("GET","${pageContext.request.contextPath}/servlet/XMLServlet?province="+province,true);
		 xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		 xmlhttp.onreadystatechange=returnCities;
		 xmlhttp.send(null);
	 }
	 
	 function returnCities(){
		 if(xmlhttp.readyState==4){ //表示请求和响应的处理结束了
			 if(xmlhttp.status==200){ //表示处理后的状态
				 var returnXML=xmlhttp.responseXML;
				 var cs=document.getElementById("citiesID");
				 alert(returnXML);
				 var city=returnXML.getElementsByTagName("city");
				 while(cs.childNodes.length>2){
					 cs.removeChild(cs.childNodes[cs.childNodes.length-1]);
				 }
				 for(var i=0;i<city.length;i++){
					 var option=document.createElement("option");
					 option.innerText=city[i].firstChild.data;
					 cs.appendChild(option);
				 }
			 }
		 }
	 }
	 
	 function getXMLHttpRequest(){
	    	if(window.XMLHttpRequest){  //注意这里 XMLHttpRequest  不是大写的 "HTTP"
		        //针对FireFox,Mozilla,Opera,Safari,IE7,IE8
		        xmlhttp=new XMLHttpRequest();
		        //针对某些特定的版本的mozilla浏览器的BUG进行修正
		        if(xmlhttp.overrideMimeType){
		        	 //如果返回的是xml数据 需要将 text/html --> text/xml
		            xmlhttp.overrideMimeType("text/xml");
		        }
	   		 }else if(window.ActiveXObject){
		        //针对 IE6 IE5.5 IE5
		        //两个可以创建XMLHTTPRequest对象额控件名称保存在js数据中
		        var activexName=["MSXML2.XMLHTTP","Microsoft.XMLHTTP"];
		        for(var i=0;i<activexName.length;i++){
		            try{
		                //取出控件名称进行创建,如果创建成功终止循环
		                //如果创建失败,抛出异常,然后可以继续循环,继续尝试
		                xmlhttp=new ActiveXObject(activexName[i]);
		                break;
		            }catch(e){
		
		            }
		        }
		    }
		    //确认XMLHTTPRequest对象创建成功
		    if(!xmlhttp){
		        alert("XMLHttpRequest对象创建失败!");
		        return;
		    }
    	}
	</script>
  </body>

xmlServlet.java
import java.io.IOException;
import java.io.PrintWriter;

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


public class XMLServlet extends HttpServlet {

	
	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("application/xml;charset=utf-8");
		//response.setContentType("text/xml;charset=utf-8");
		PrintWriter out = response.getWriter();
		String province=request.getParameter("province");
		System.out.println("param:"+province);
		StringBuilder sb=new StringBuilder();
		if("zj".equals(province)){
			sb.append("<?xml version='1.0' encoding='UTF-8' ?>");
			sb.append("<cities>");
			sb.append("<city>杭州</city>");
			sb.append("<city>宁波</city>");
			sb.append("<city>温州</city>");
			sb.append("<city>天台</city>");
			sb.append("</cities>");
		}
		else if("gd".equals(province)){
			sb.append("<?xml version='1.0' encoding='UTF-8' ?>");
			sb.append("<cities>");
			sb.append("<city>广州</city>");
			sb.append("<city>深圳</city>");
			sb.append("<city>珠海</city>");
			sb.append("<city>东莞</city>");
			sb.append("</cities>");
		}
		System.out.println(sb.toString());
		out.print(sb.toString());
	}

}

--------------Json 数据载体--------------
json:(javaScript Object Notation) 是一种轻量级的数据交换格式,它是一种特定额字符串形式来表示的javaScript对象,如果将具有这样一种形式的字符串赋值给一个javaScript变量,该变量随后将引用一个通过指定给该变量的字符串构建对象。
 JSON是独立于语言的,他主要有如下两种数据结构

1.名/值对的集合
  在不同的语言中,它白实现为对象(object) 记录(record) 结构(struct) 字典(dictionary) 哈希表(hashCode) 有键列表(key List) 或者 关联数组(associative array )

2.值的有序列表
  在大部分语言中,它被实现为数组(array)

对象:
  对象是一个无序的名/值对集合。一个对象在以左花括号({) 开始,以右花括号(})结束.每个名称和值之间以(;)分隔,名/值对之间使用英文逗号(,)
 例如:
 <script type="text/javascript">
    var user={"userName":"xiaoqi","sex":"男","age":"24"}
 </script>


数组
 数组是值(value)的有序集合,一个数组以坐括号([)开始,以右括号结束(]),值之间使用英文(,)逗号分隔
  例如:
   <script type="text/javascript">
   var userName=["xiaoqi","xiaoxue","candy"];
  </script>

值
  值可以是双引号括起来的字符串(String) 数组(number) true false null 对象(object) 数组 (array) 这些结构可以嵌套

字符串
  字符串(String) 是有双引号阔气阿里的认识数量Unicode字符的集合,使用反斜杠(\)转义,一个字符串即一个单独的字符串

数值
 数值(number)与java中的数值非常相似,但不区分整型值和浮点型.也不支持8进制和16进制格式.

与xml比较
1:JSON是类型化的,值可以是String number array boolean object null 而xml 是无类型的.所有的值是字符串.
2.使用JSON 不需要再解析数据.
  例如:服务器端的响应可以是一下的JSON串:
  {name:"xiaoqi",age:"24"}
  使用eval()函数可以将这个JSON串换为javaScript 对象,如下
  var user=eva('('+xmlhttp.responseText+')');


示例:
<body>
    <h3>JSON的使用</h3>
    <input type="button" value="获取JSON数据" onclick="getInfo()"/>
    <div id="showInfo"></div>
<script type="text/javascript">
	var xmlhttp;
	function getInfo(){
		getXMLHttpRequest();
		xmlhttp.open("GET","jslib/user.txt",true);
		xmlhttp.onreadystatechange=returnInfo;
		xmlhttp.send(null);
	}
	
	function returnInfo(){
		if(xmlhttp.readyState=4){
			if(xmlhttp.status==200){
				var info=xmlhttp.responseText;
				var func=new Function("return"+info);
				var json=func();
				var value="姓名:<font color='red'>"+json.name+"</font>&nbsp;&nbsp;";
				value+="年龄:<font color='red'>"+json.age+"</font>";
				document.getElementById("showInfo").innerHTML=value;
			}
		}
	}
	function getXMLHttpRequest(){
	    	if(window.XMLHttpRequest){  //注意这里 XMLHttpRequest  不是大写的 "HTTP"
		        //针对FireFox,Mozilla,Opera,Safari,IE7,IE8
		        xmlhttp=new XMLHttpRequest();
		        //针对某些特定的版本的mozilla浏览器的BUG进行修正
		        if(xmlhttp.overrideMimeType){
		        	 //如果返回的是xml数据 需要将 text/html --> text/xml
		            xmlhttp.overrideMimeType("text/html");
		        }
	   		 }else if(window.ActiveXObject){
		        //针对 IE6 IE5.5 IE5
		        //两个可以创建XMLHTTPRequest对象额控件名称保存在js数据中
		        var activexName=["MSXML2.XMLHTTP","Microsoft.XMLHTTP"];
		        for(var i=0;i<activexName.length;i++){
		            try{
		                //取出控件名称进行创建,如果创建成功终止循环
		                //如果创建失败,抛出异常,然后可以继续循环,继续尝试
		                xmlhttp=new ActiveXObject(activexName[i]);
		                break;
		            }catch(e){
		
		            }
		        }
		    }
		    //确认XMLHTTPRequest对象创建成功
		    if(!xmlhttp){
		        alert("XMLHttpRequest对象创建失败!");
		        return;
		    }
    	}

</script>    
  </body>


jslib/user.txt
{name:"xiaoqi",age:"24"}


--------------------dojo的使用--------------------
1.在webroot文件夹下导入dojo所需要的文件
dojo  dojox  dijit

示例:dojo.jsp
 <body>
    <div id="showDate"></div><br/>
    <input type="button" value="获取服务器当前的时间" onclick="getDate()"/>
    <script type="text/javascript" src="dojo/dojo/dojo.js"></script>
    <script type="text/javascript">
    	function getDate(){
    		dojo.xhrGet({
    			url:"getDate.jsp",
    			load:returnDate,
    			error:dealError
    		});
    	}
    	function returnDate(data,ioArgs){
    		document.getElementById("showDate").innerHTML=data;
    	}
    	
    	function dealError(data,ioArgs){
    		document.getElementById("showDate").innerHTML="服务器访问失败!";
    	}
    
    </script>
  </body>


getDate.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
out.println("服务器当前日期时间为:<font color='red'>"+new Date()+"</font>");
%>


--------------Struts2 使用 json-------------------
1.添加 struts2-json-plugin-2.3.4.jar
test.action
package com.sh.action;

import org.apache.struts2.json.annotations.JSON;

import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
public class Test extends ActionSupport {
	private int studentId=1001;
	private String studentName="小霸王";
	private String studentSex="男";
	private int studentAge=21;
	private String studentClass="04PC";
	private String studentAddress="北京市朝阳区";
	
//	注释后 返回的json字符串中将没有这个 键值对
//	public int getStudentId() {
//		return studentId;
//	}
	public void setStudentId(int studentId) {
		this.studentId = studentId;
	}
	public String getStudentName() {
		return studentName;
	}
	public void setStudentName(String studentName) {
		this.studentName = studentName;
	}
	public String getStudentSex() {
		return studentSex;
	}
	public void setStudentSex(String studentSex) {
		this.studentSex = studentSex;
	}
	//添加JSON注解  不序列化
	@JSON(serialize=false)
	public int getStudentAge() {
		return studentAge;
	}
	public void setStudentAge(int studentAge) {
		this.studentAge = studentAge;
	}
	public String getStudentClass() {
		return studentClass;
	}
	public void setStudentClass(String studentClass) {
		this.studentClass = studentClass;
	}
	public String getStudentAddress() {
		return studentAddress;
	}
	public void setStudentAddress(String studentAddress) {
		this.studentAddress = studentAddress;
	}
	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		return SUCCESS;
	}	
}


struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts> 
    <constant name="struts.i18n.encoding" value="utf-8"/>
    <package name="default" extends="json-default">
    	<action name="test" class="com.sh.action.Test">
    		<result type="json">
    			<param name="excludeProperties">studentAddress</param>
    		</result>
    	</action>
    </package>
</struts>




后面的theme="ajax" 由于 struts-dojo中少了模版文件 写的例子都运行不了 所以就不发了


----------------------Struts2中 采用ajax输入校验-----------
Struts2中的AJax输入校验使用的是DWR矿框架,下面举例介绍在Struts2中使用DWR框架进行AJax输入校验
  1.加载DWR文件,使用DWR款家需要在web应用中加载DWRjar文件的jwr.jar 该文件可以通过http://directwebremoting.org/dwr/download 进行下载,下载后将dwr复制到web应用的web-inf/lib目录中

 2.配置DWR 
   创建一个WEB应用,然后配置好Struts2的开发环境,并添加dwr.jar 然后配置dwr,需要在web.xml文件中配置DWR核心Servlet 

分享到:
评论

相关推荐

    14_利用XMLHttpRequest接受与处理XML数据.doc

    在本文件中,我们将深入探讨如何利用XMLHttpRequest接收和处理XML数据,从而使代码更加健壮。 一、XMLHttpRequest对象 XMLHttpRequest对象是JavaScript内置的,用于创建与服务器的连接并发送HTTP请求。创建一个新...

    XML与JSON文件代码例子

    例如,在JavaScript中,有内置的`XMLHttpRequest`用于发送HTTP请求,`JSON.parse()`和`JSON.stringify()`用于转换JSON数据;在Python中,有`xml.etree.ElementTree`库处理XML,`json`模块处理JSON。 总结来说,XML...

    使用Ajax向PHP服务端发送请求并返回JSON数据

    总结起来,使用Ajax向PHP服务端发送请求并接收JSON数据涉及的主要步骤包括创建XMLHttpRequest对象、设置回调函数、打开连接、设置请求头、发送请求以及在服务端处理请求和返回JSON数据。理解这些步骤对于Web开发中的...

    ajax请求复杂的json数据实例

    在现代Web开发中,AJAX(Asynchronous JavaScript and XML)技术是不可或缺的一部分,它允许网页在不刷新整个页面的情况下与服务器进行数据交换。本实例主要关注如何使用AJAX处理复杂的JSON(JavaScript Object ...

    Ajax中使用JSON传输数据

    例如,将上面的JSON对象作为POST请求的数据发送: ```javascript var xhr = new XMLHttpRequest(); xhr.open('POST', 'http://example.com/api/user'); xhr.setRequestHeader('Content-Type', 'application/json');...

    XmlHttpRequest与XMLDOM的完整使用(ASP.NET Web)

    在ASP.NET Web应用中,这两个技术经常结合使用,通过XHR从服务器获取XML数据,然后使用XMLDOM在客户端解析和处理这些数据,从而实现动态更新页面内容。这种组合可以提高用户体验,因为用户无需等待整个页面刷新。 ...

    java代码发送JSON格式的httpPOST请求

    下面将详细解析如何利用`HttpURLConnection`来构建并发送一个包含JSON数据的POST请求: ```java import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io....

    ajax 解析json数据

    在Web开发中,AJAX(Asynchronous JavaScript and XML)是一种创建动态网页的技术,它允许页面在不重新加载整个页面的情况下与服务器交换数据并更新部分网页内容。JSON(JavaScript Object Notation)是一种轻量级的...

    基于ASP.NET+XML +JSON实现的Ajax 异步数据操作程序源码例子

    在"Ajax Tutorial for Beginners with XML - JSON- Part 2"这个压缩包中,可能包含了第二部分的教程内容,涉及如何在ASP.NET中设置Ajax请求,以及如何处理XML或JSON数据。可能涵盖的话题包括: 1. 创建ASP.NET Web...

    asp.net json格式数据

    例如,`$.getJSON`函数可以方便地从服务器请求JSON数据,而`$.ajax`方法可以自定义更复杂的请求,包括JSON数据的发送和接收。 5. **WebMethod和JSON**: - ASP.NET页面上的`WebMethod`特性允许在代码-behind文件中...

    原生AJAX或jQuery实现二级联动选择以及解析XML和JSON数据格式

    然后,服务器返回的JSON或XML数据会被解析并填充到二级选择框中。 在解析XML数据时,JavaScript提供了DOM解析器,可以将XML字符串转换为DOM树结构,通过遍历节点来获取数据。例如,`document.createElement()`、`...

    Ajax 解析XML+json总结

    1. **获取XML数据**:当Ajax请求完成,可以通过`responseXML`属性获取到XML文档对象。 2. **DOM解析**:使用DOM(Document Object Model)接口,如`getElementsByTagName()`, `getAttribute()`, `childNodes`等方法...

    Ajax +jquery跨域获取JSON

    在本案例中,开发者成功地实现了跨域请求以获取JSON数据,并将这些数据用于展示天气预报。 首先,让我们详细了解一下Ajax。Ajax的核心是JavaScript的XMLHttpRequest对象,它允许在不刷新整个页面的情况下,与服务器...

    平台java前端ajax,json请求

    本话题主要关注在Web平台中,使用Java后端和JavaScript前端进行JSON数据交互的过程,具体涉及到AJAX(Asynchronous JavaScript and XML)技术以及JSON(JavaScript Object Notation)数据格式。 **1. AJAX**:AJAX ...

    Json数据请求和获取实例代码

    本实例将深入探讨如何在编程中发送JSON数据请求并获取响应的JSON数据。 首先,我们要了解JSON的基本结构。JSON对象以大括号 `{}` 表示,数组以方括号 `[]` 表示。键值对用冒号 `:` 分隔,不同的键值对之间用逗号 `,...

    xmlhttp+asp+javascript+xml+json

    在压缩包"xmlhttp+asp+javascript+xml+json"中,可能包含了示例代码或者教程,展示了如何在ASP环境中使用XMLHTTP对象与服务器通信,JavaScript处理JSON或XML响应,并在客户端进行数据操作。如果你正面临一个需要使用...

    获取json数据并且解析

    以GET为例,你可以使用JavaScript的`fetch` API或者XMLHttpRequest(XHR)来发送请求并获取JSON响应: ```javascript // 使用fetch API fetch('https://api.example.com/data') .then(response =&gt; response.json()...

    使用struts2 和ajax进行传递json数据

    当Struts2处理完请求并返回JSON数据后,Ajax回调函数会接收到这些数据,然后可以动态更新DOM元素,实现页面的局部刷新。 **注意事项** 1. 在Struts2中,确保已经添加了JSON插件,如struts2-json-plugin,以便支持...

    Ajax\掌握 Ajax第 7 部分-在请求和响应中使用 XML

    表面上看,这个名字似乎暗示着它是为了处理XML数据而生的。然而,实际上,XMLHttpRequest的主要功能仅仅是提供了一个接口,使得客户端代码(通常是JavaScript)能够发送HTTP请求。也就是说,它是一个通用的HTTP请求...

Global site tag (gtag.js) - Google Analytics