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

2019-03-28 15:34

functionstartRequest(){ createXMLHttpRequest();

xmlHttp.onreadystatechange=handleStateChange; xmlHttp.open(\xmlHttp.send(null); }

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

document.getElementById(\xmlHttp.responseText; } } }

在这边为了简化范例,直接使用DOM对象的innerHTML属性,您可以按链结观看结果。

40.4发送请求参数

如果在请求时,要连带发送相关参数,若是使用GET的方式发送参数,则将参数附加在URL上即可,例如:

varurlAndqueryString=\xmlHttp.open(\xmlHttp.send(null);

如果发送请求时使用POST,那么将要发送的资料塞到send()中即可,例如: varurl=\

varqueryString=\xmlHttp.open(“POST\

xmlHttp.setRequestHeader(\xmlHttp.send(queryString);

由于塞到POST本体中的资料有可能是表单的name/value,也有可能是XML、JSON等格式,您必须告诉伺服端如何剖析表单本体内容,这可以设定Content-Type的header来告知,以name/value或JSON格式来说,就要设定Content-Type为application/x-www-form-urlencoded,如果是XML文件的话,则要设定text/xml。

以下以简单的实例示范如何以GET及POST发送请求参数,假设您用以下的Servlet来处理请求:

GetPostServlet.java

packageonlyfun.caterpillar; importjava.io.IOException; importjava.io.PrintWriter;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse;

publicclassGetPostServletextendsjavax.servlet.http.HttpServletimplements

6

javax.servlet.Servlet{ publicGetPostServlet(){ super(); }

protectedvoiddoGet(HttpServletRequestrequest,

HttpServletResponseresponse)throwsServletException,IOException{ doResponse(request,response,\}

protectedvoiddoPost(HttpServletRequestrequest,

HttpServletResponseresponse)throwsServletException,IOException{ doResponse(request,response,\}

privatevoiddoResponse(HttpServletRequestrequest, HttpServletResponseresponse,Stringmethod) throwsServletException,IOException{

Stringname=request.getParameter(\response.setContentType(\PrintWriterout=response.getWriter(); out.println(method+\out.flush(); out.close(); } }

回应只是简单的传回发送的请求参数值,并加上GET或POST表示接收到何种请求,假设您使用以下的网页来发送请求:

GETPOSTEx-1.html

\

GET、POST

网页上分别有GET与POST两个按钮,按下后分别由GETPOSTEx-1.js中的doGetRequest()或doPostRequest()来发送GET、POST请求,假设GETPOSTEx-1.js撰写如下:

GETPOSTEx-1.js varxmlHttp;

7

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

elseif(window.ActiveXObject){

xmlHttp=newActiveXObject(\} }

functioncreateQueryString(){//建立请求参数

return\取得文字方块值 }

functiondoGetRequest(){

varurl=\createXMLHttpRequest();

xmlHttp.onreadystatechange=handleStateChange; xmlHttp.open(\xmlHttp.send(null); }

functiondoPostRequest(){

varurl=\避免快取 createXMLHttpRequest();

xmlHttp.onreadystatechange=handleStateChange; xmlHttp.open(\

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

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

document.getElementById(\xmlHttp.responseText; } } }

由于POST时,网址URL并不会有所变化,在某些浏览器,如果请求的URL是相同的,则会利用快取中的资料,为了避免资料快取,则您可以故意加上一个timeStamp请求参数,附上当时系统的时间,如此每次请求时URL就不会相同。

完成以上程式后,在网页文字方块中输入\并按下GET按钮,则会传回\并显示在网页上,按下POST按钮,则会传回\并显示在网页上。

41.5XML传送与接收

Ajax客户端与服务端之间,可以使用XML作为资料传送、沟通的格式,Ajax客户端若要发送

8

XML,基本上就是将XML作为字串,塞在POST本体中发送,例如:

HandleXMLEx-1.js varxmlHttp;

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

elseif(window.ActiveXObject){

xmlHttp=newActiveXObject(\} }

functionprepareXML(){ varxml=\

varoptions=document.getElementById(\for(vari=0;i

xml=xml+\} }

xml=xml+\returnxml; }

functionhandleSkills(){ varxml=prepareXML();

varurl=\createXMLHttpRequest();

xmlHttp.onreadystatechange=handleStateChange; xmlHttp.open(\

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

在上例中,将客户端于多选单中选择的资料,以下列的XML格式送出:

java vb csharp

而服务端接收到XML之后,针对XML加以分析,取得每个节点资料,如果使用Servlet作为服务器端,可以使用org.w3c.dom下所提供的DOM操作相关类别来剖析XML的内容,例如在以下的XMLServlet中,将取得的XML加以剖析,并以另一个XML文件重新发送回客户端。

XMLServlet.java

packageonlyfun.caterpillar; importjava.io.*;

importjavax.servlet.*; importjavax.servlet.http.*;

9

importjavax.xml.parsers.DocumentBuilder;

importjavax.xml.parsers.DocumentBuilderFactory; importjavax.xml.parsers.ParserConfigurationException; importorg.w3c.dom.Document; importorg.w3c.dom.NodeList; importorg.xml.sax.SAXException;

publicclassXMLServletextendsjavax.servlet.http.HttpServlet implementsjavax.servlet.Servlet{ protectedvoiddoPost(

HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{

Stringxml=readXMLFromRequestBody(request); DocumentxmlDoc=null; try{

DocumentBuilderbuilder=

DocumentBuilderFactory.newInstance().newDocumentBuilder(); xmlDoc=builder.parse(

newByteArrayInputStream(xml.getBytes())); }

catch(ParserConfigurationExceptione){ System.out.println(e); }

catch(SAXExceptione){ System.out.println(e); }

StringresponseXML=prepareXMLResponse(xmlDoc);

responseXML=responseXML+\response.setContentType(\response.getWriter().print(responseXML); }

privateStringreadXMLFromRequestBody(HttpServletRequestrequest){ StringBufferxml=newStringBuffer(); try{

BufferedReaderreader=request.getReader(); Stringline=null;

while((line=reader.readLine())!=null){ xml.append(line); } }

catch(Exceptione){

System.out.println(\读取有误…\

10


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

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

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

马上注册会员

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