J2EE从入门到精通40-41-Ajax(3)

2019-03-28 15:34

}

returnxml.toString(); }

privateStringprepareXMLResponse(DocumentxmlDoc){

NodeListselectedSkills=xmlDoc.getElementsByTagName(\

StringBufferxml=newStringBuffer(); xml.append(\

for(inti=0;i

Stringskill=selectedSkills.item(i).getFirstChild().getNodeValue(); xml.append(\xml.append(skill);

xml.append(\}

returnxml.toString(); } }

这个Servlet只是简单的示范如何剖析XML,并重新使用以下的XML格式,将选择的资料发送回客户端:

java vb csharp

将资料以新的XML格式发送回客户端,纯綷只是要示范客户端取得XML文件时,如果加以剖析处理,客户端接收到的资料如果是XML文件,则可以使用XMLHttpRequest的responseXML属性,尝试取得代表XML文件的DOM对象,之后就可以利用DOM的各种操作方法来剖析文件内容,例如:

functionhandleStateChange(){ if(xmlHttp.readyState==4){ if(xmlHttp.status==200){

varxmlDoc=xmlHttp.responseXML;//取得DOM对象

varresponses=xmlDoc.getElementsByTagName(\varout=\

for(vari=0;i

out=out+\}

document.getElementById(\} } }

在这边您所看到的三段JavaScript片段,组成HandleXMLEx-1.js,可以搭配以下的HTML来完成一个完整的客户端/伺服端程式:

11

HandleXMLEx-1.html

\

处理XML


如果执行这个程式,客户端所选择的资料以XML送出,伺服端加以剖析,并以另一个XML传回,客户端再剖析XML并显示标签中的文字,这是一个基本的XML传送与接收的例子。

40.6JSON传送与接收

在JSON中我们已经介绍过其基本格式,与XML相同,JSON只是一个文字格式,只要客户端与伺服端可以剖析它,就可以利用它作为传送资料的格式,但它是JavaScript的核心特性之一,所以在JavaScript中使用JSON作为资料格式很方便,您还可以在http://www.json.org找到处理JSON的程式库,包括客户端JavaScriptlibrary与伺服端的library。

相较于XML,JSON在资料表示时更为简洁,例如一个表示帐户的资料,XML中可能如下表示:

123456 Justin 1000

而使用JSON可以这么表示: varaccount={ number:\name:\balance:\};

12

您可以下载http://www.json.org/json.js,并将之加入至网页之中:

json.js中有JSONparser与JSONstringifier,例如它扩充了对象,增加了toJSONString()函式,您可以直接如下传回对象的JSON表示法:

functionAccount(number,name,balance){ this.number=number; this.name=name; this.balance=balance; }

varaccount=newAccount(123456,\alert(account.toJSONString()); 您可以按下执行范例观看结果。

您可以把JSON表示法以POST发送至伺服端,例如: HandleJSONEx-2.js varxmlHttp;

functioncreateXMLHttpRequest(){ if(window.XMLHttpRequest){ xmlHttp=newXMLHttpRequest(); }

elseif(window.ActiveXObject){

xmlHttp=newActiveXObject(\} }

functionprepareJSON(){ varnumber=document.getElementById(\ varname=document.getElementById(\ varbalance=document.getElementById(\ varaccount=newObject(); account.number=number; account.name=name; account.balance=balance; returnaccount.toJSONString(); }

functionhandleAccount(){ varjson=prepareJSON();

varurl=\createXMLHttpRequest();

xmlHttp.onreadystatechange=handleStateChange; xmlHttp.open(\

xmlHttp.setRequestHeader(\\xmlHttp.send(json); }

functionhandleStateChange(){

13

if(xmlHttp.readyState==4){ if(xmlHttp.status==200){

document.getElementById(\} } }

这个程式使用者输入的帐号资讯包装为对象,并使用JSON扩充的toJSONString()将之转换为JSON格式,之后POST至伺服端,伺服端可以至JSONinJava下载JSON伺服端的Parser,您可以撰写以下的程式:

JSONServlet.java

packageonlyfun.caterpillar; importjava.io.*;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; importorg.json.*;

publicclassJSONServletextendsjavax.servlet.http.HttpServlet implementsjavax.servlet.Servlet{ publicJSONServlet(){ super(); } protectedvoiddoPost(HttpServletRequestrequest,

HttpServletResponseresponse)throwsServletException,IOException{ Stringjson=readJSONString(request);

JSONObjectjsonObject=null; StringresponseText=null; try{

jsonObject=newJSONObject(json);

responseText=\帐号\\名称\余额\+jsonObject.getString(\}

catch(JSONExceptione){ e.printStackTrace(); }

response.setCharacterEncoding(\response.setContentType(\response.getWriter().print(responseText); }

privateStringreadJSONString(HttpServletRequestrequest){ StringBufferjson=newStringBuffer(); Stringline=null;

14

try{

BufferedReaderreader=request.getReader(); while((line=reader.readLine())!=null){ json.append(line); } }

catch(Exceptione){

System.out.println(e.toString()); }

returnjson.toString(); } }

这个Servlet剖析JSON,并将资料取出后再传回文字回应。

如果将JSON字串传回给客户端浏览器,则可以使用eval()将之运算为一个JavaScript对象以进行操作。

40.7输入验证

表单资料的验证可以分为客户端验证与伺服端验证,为了安全起见,避免客户端验证被跳过,伺服端验证往往是必须的。

当使用者在表单中输入资料时,在过去往往只能靠使用者完成资料输入,再按下“送出”按钮,才可以进行伺服端验证,现在可以利用非同步请求方式,在使用者某些栏位输入完成之后,就以非同步方式在背景发送请求给伺服端进行验证,若有误再以DOM更新页面讯息,使用者可以即时发现先前错误的输入。

举个例子来说,有个网页必须输入帐户号码与姓名,帐户号码是XXX-XXXXXX-X的格式,X为数字:

InputValidateEx-1.html

\

输入验证

帐户号码:

当使用者在帐户号码输入完成,转而输入姓名时,这时会触发onchange事件而执行validate()函式,您可以在validate()函式中发送号码栏位,以非同步方式向伺服端要求验证:

InputValidateEx-1.js varxmlHttp;

functioncreateXMLHttpRequest(){

15


J2EE从入门到精通40-41-Ajax(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:某新建城镇污水处理厂设计开题报告

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: