傳送與接收覆盖
Ajax客戶端與伺服端之間,可以使用XML作為資料傳送、溝通的格式,Ajax客戶端若要發送XML,基本上就是將XML作為字串,塞在POST本體中發送,例如:
var xmlHttp;
function createXMLHttpRequest() {
if(LHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
else if(tiveXObject) {
xmlHttp = new ActiveXObject(\"LHTTP\");
}
}
function prepareXML() {
var xml = \"skills\";
var options = tElementById(\"skills\").childNodes;
for(var i = 0; i ngth; i++) {
var option = options[i];
if(lected) {
xml = xml + \"skill\" + lue + \"\\/skill\";
}
}
xml = xml + \"\\/skills\";
return xml;
}
function handleSkills() {
var xml = prepareXML();
var url = \"XMLServlet?timeStamp\" + new Date().getTime();
createXMLHttpRequest();
readystatechange = handleStateChange;
en(\"POST\", url);
tRequestHeader(\"Content-Type\", \"text/xml\");
nd(xml);
}
在上例中,將客戶端於多選單中選擇的資料,以下列的XML格式送出:
skills
skilljava/skill
skillvb/skill
skillcsharp/skill
/skills
而伺服端接收到XML之後,針對XML加以剖析,取得每個節點資料,如果使用Servlet作為伺服端,可以使用org.w3c下所提供的DOM操作相關 類別來剖析XML的內容,例如在以下的XMLServlet中,將取得的XML加以剖析,並以另一個XML文件重新發送回客戶端。
vapackage terpillar;
import .*;
import rvlet.*;
import tp.*;
import cumentBuilder;
import cumentBuilderFactory;
import rserConfigurationException;
import cument;
import deList;
import XException;
public class XMLServlet extends tpServlet implements rvlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String xml = readXMLFromRequestBody(request);
Document xmlDoc = null;
try {
DocumentBuilder builder =
wInstance().newDocumentBuilder();
xmlDoc = rse(
new ByteArrayInputStream(tBytes()));
}
catch(ParserConfigurationException e) {
intln(e);
}
catch(SAXException e) {
intln(e);
}
String responseXML = prepareXMLResponse(xmlDoc);
responseXML = responseXML + \"/responses\";
tContentType(\"text/xml\");
tWriter().print(responseXML);
}
private String readXMLFromRequestBody(HttpServletRequest request){
StringBuffer xml = new StringBuffer();
try {
BufferedReader reader = tReader();
String line = null;
while((line = adLine()) != null) {
pend(line);
}
}
catch(Exception e) {
intln(\"XML讀取有誤…\" + String());
}
return String();
}
private String prepareXMLResponse(Document xmlDoc) {
NodeList selectedSkills = tElementsByTagName(\"skill\");
StringBuffer xml = new StringBuffer();
pend(\"responses\");
京津冀地区PM2.5浓度要下降25%。北京为实现该目标 for(int i = 0; i tLength(); i++) {
String skill = em(i).getFirstChild().getNodeValue();
pend(\"response\");
pend(skill);
pend(\"/response\");
}
return String();
}
}
這個Servlet只是簡單的示範如何剖析XML,並重新使用以下的XML格式,將選擇的資料發送回客戶端:
response
responsejava/response
responsevb/response
responsecsharp/response
/response
將資料以新的XML格式發送回客戶端,純綷只是要示範客戶端取得XML文件時,如果加以剖析處理,客戶端接收到的資料如果是XML文件,則可以使用XMLHttpRequest的responseXML屬性,嘗試取得代表XML文件的DOM物件,之後就可以利用DOM的各種操作方法來剖析文件內容,例如:
function handleStateChange() {
if(adyState == 4) {
if(atus == 200) {
var xmlDoc = sponseXML; // 取得DOM物件
var responses = tElementsByTagName(\"response\");
var out = \"Responses: \";
for(var i = 0; i ngth; i++) {
var response = responses[i];
out = out + \"br/b\" + ildNodes[0].nodeValue + \"/b\";
}
tElementById(\"response\").innerHTML = out;
}
}
}
在這邊您所看到的三段JavaScript片段,組成,可以搭配以下的HTML來完成一個完整的客戶端/伺服端程式:
ml!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"\"
html
head
meta http-equiv=\"Content-Type\" content=\"text/html; charset=BIG5\"
title處理XML/title
script type=\"text/javascript\" src=\"\"/script
/head
body
select id=\"skills\" size=\"5\" multiple=\"true\"
option value=\"c\"C 語言/option
option value=\"cpp\"C++/option
option value=\"java\"Java/option
option value=\"csharp\"C#/option
option value=\"vb\"VB/option
/select
br
input type=\"button\" value=\"送出\" onclick=\"handleSkills();\"/
br
div id=\"response\"/div
/body
/html
如果執行這個程式,客戶端所選擇的資料以XML送出,伺服端加以剖析,並以另一個XML傳回,客戶端再剖析XML並顯示標籤中的文字,這是一個基本的XML傳送與接收的例子。
查看本文来源
石家庄市治疗白癜风北京白癜风治疗
上海哪家治白癜风医院好
- 上一页:使用其它方法来存取元素计划
- 下一页:入门牛
-
FCC文件阐述苹果神秘的“网络适配器”,运行iOS系统
IT之家 5 月 22 日通告,支持蓝牙或 Wi-Fi 的商品都必须得到 FCC 等监管政府机构...
2023-11-02
-
碧桂园成功面世5亿元公司债 票面利率4.5%
北京商报讯(记者 王寅浩)5年末20日晚间,碧桂园发布公告称,失败发行202...
2023-10-22
-
比拼性价比,还有比moto X30冠军海外版更卷的旗舰存在吗?
一代舰长一代魂,月内,智能个人电脑的“魂”已经升级成了骁龙8 Gen 1,现...
2023-10-20
-
格局 | 找到问题的关键点,离解决它就不远了,想到有远见卓识的人
古人云:不诛全局者实无乏诛一域,不诛万世者实无乏诛足见。行驶于职场,...
2023-10-19
-
杨洋这次转型最终了吗?寸头硬汉 or 奶油小生,你更爱哪个他?
近来,杨幂绿洲发布极少周刊,推上《MadameFigaro》封面新设计,辅以暮光橙渐...
2023-10-12
-
台当局派团赴帕劳开会炒“任职期间突破” 返台后12人感染新冠
中新网4月19日电 据台湾“中央社”报道,台任职期间教育部门称,返关岛与...
2023-10-11