分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 运营维护

Ajax发送XML请求案例

发布时间:2023-09-06 01:07责任编辑:胡小海关键词:Ajax

如果请求参数较多,而且请求参数的结构关系复杂,则可以考虑发送XML请求。XML请求的实质还是POST请求,只是在发送请求的客户端页面将请求参数封装成XML字符串的形式,服务器端则负责解析该XML字符串。当然,服务器获取到XML字符串后,可借助于dom4j或JDOM等工具来解析。

程序清单:Ajax02request/xml/second.jsp

 1 <%@ page contentType="text/html; charset=UTF-8" language="java" %> 2 <%@ page import="java.io.*,java.util.*,org.dom4j.io.XPPReader,org.dom4j.*"%> 3 <% 4 // 定义一个StringBuffer对象,用于接收请求参数 5 StringBuffer xmlBuffer = new StringBuffer(); 6 String line = null; 7 // 通过request对象获取输入流 8 BufferedReader reader = request.getReader(); 9 // 依次读取请求输入流的数据10 while((line = reader.readLine()) != null ) 11 {12 ????xmlBuffer.append(line);13 }14 // 将从输入流中读取到的内容转换为字符串15 String xml = xmlBuffer.toString();16 // 以Dom4J开始解析XML字串串17 Document xmlDoc = new XPPReader().read(new ByteArrayInputStream(xml.getBytes()));18 // 获得countrys节点的所有子节点19 List countryList = xmlDoc.getRootElement().elements();20 // 定义服务器响应的结果21 String result = "";22 // 遍历countrys节点的所有子节点23 for(Iterator it = countryList.iterator(); it.hasNext();)24 {25 ????Element country = (Element)it.next();26 ????// 如果发送的该节点的值为1,表明选中了中国27 ????if (country.getText().equals("1"))28 ????{29 ????????result += "上海$广州$北京";30 ????}31 ????// 如果发送的该节点的值为1,表明选中了美国32 ????else if(country.getText().equals("2"))33 ????{34 ????????result += "$华盛顿$纽约$加洲";35 ????}36 ????// 如果发送的该节点的值为1,表明选中了日本37 ????else if(country.getText().equals("3"))38 ????{39 ????????result += "$东京$大板$福冈";40 ????}41 }42 // 向客户端发送响应43 out.println(result);44 %>

程序清单:Ajax02request/xml/first.html下面是处理XML请求的JSP页面代码。

 ?1 <!DOCTYPE html> ?2 <html> ?3 <head> ?4 ????<meta name="author" content="silvan" /> ?5 ????<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> ?6 ????<title> 发送XML请求 </title> ?7 ????<style type="text/css"> ?8 ????????select { ?9 ????????????width: 120px; 10 ????????????font-size:11pt; 11 ????????} 12 ????</style> 13 </head> 14 <body> 15 <!-- 支持多选的列表框 --> 16 <select name="first" id="first" size="5" multiple="multiple"> 17 ????<option value="1" selected="selected">中国</option> 18 ????<option value="2">美国</option> 19 ????<option value="3">日本</option> 20 </select> 21 <!-- 用于发送Ajax请求的按钮 --> 22 <input type="button" value="发送" onClick="send();" /> 23 <!-- 被级联改变的列表框 --> 24 <select name="second" id="second" size="5" ></select> 25 <script type="text/javascript"> 26 String.prototype.trim = function() 27 { 28 ????return this.replace(/^\s+/ , "") 29 ????????.replace(/\s+$/ , ""); 30 } 31 // 保存XMLHttpRequest对象的变量 32 var xmlrequest; 33 function createXMLHttpRequest() 34 { 35 ????if(window.XMLHttpRequest) 36 ????{ 37 ????????// DOM 2浏览器 38 ????????xmlrequest = new XMLHttpRequest(); 39 ????} 40 ????// IE浏览器 41 ????else if (window.ActiveXObject) 42 ????{ 43 ????????try 44 ????????{ 45 ????????????xmlrequest = new ActiveXObject("Msxml2.XMLHTTP"); 46 ????????} 47 ????????catch (e) 48 ????????{ 49 ????????????try 50 ????????????{ 51 ????????????????xmlrequest = new ActiveXObject("Microsoft.XMLHTTP"); 52 ????????????} 53 ????????????catch (e){} 54 ????????} 55 ????} 56 } 57 // 定义创建XML文档的函数 58 function createXML() 59 { 60 ????// 开始创建XML文档,countrys是根元素 61 ????var xml = "<countrys>" ; 62 ????// 获取first元素的,并获取起所有的子节点(选项) 63 ????var options = document.getElementById("first").childNodes; 64 ????var option = null ; 65 ????// 遍历国家下拉列表的所有选项 66 ????for (var i = 0 ; i < options.length; i ++) 67 ????{ 68 ????????option = options[i]; 69 ????????// 如果某个选项被选中 70 ????????if (option.selected) 71 ????????{ 72 ????????????// 在countrys的根节点下增加一个country的子节点 73 ????????????xml = xml + "<country>" + option.value + "<\/country>"; 74 ????????} 75 ????} 76 ????// 结束XML文档的根节点 77 ????xml = xml + "<\/countrys>" ; 78 ????// 返回XML文档 79 ????return xml; 80 } 81 // 定义发送XML请求的函数 82 function send() 83 { 84 ????// 初始化XMLHttpRequest对象 85 ????createXMLHttpRequest(); 86 ????// 定义请求发送的URL 87 ????var uri = "second.jsp"; 88 ????// 打开与服务器连接 89 ????xmlrequest.open("POST", uri, true); 90 ????// 设置请求头 91 ????xmlrequest.setRequestHeader("Content-Type" 92 ????????, "application/x-www-form-urlencoded"); 93 ????// 指定当XMLHttpRequest对象状态发生改变时触发processResponse函数 94 ????xmlrequest.onreadystatechange = processResponse; 95 ????// 发送XML请求 96 ????xmlrequest.send(createXML()); 97 } 98 // 处理服务器响应 99 function processResponse()100 {101 ????if(xmlrequest.readyState == 4)102 ????{103 ????????if(xmlrequest.status == 200)104 ????????{105 ????????????// 获取服务器响应字符串,并以$作为分隔符分割成多个字符串106 ????????????var cityList = xmlrequest.responseText.split("$");107 ????????????var displaySelect = document.getElementById("second");108 ????????????// 清空second下拉列表的选项109 ????????????displaySelect.innerHTML = null;110 ????????????for (var i = 0 ; i < cityList.length ; i++)111 ????????????{112 ????????????????if(cityList[i].trim().length > 0)113 ????????????????{114 ????????????????????// 依次创建多个option元素115 ????????????????????option = document.createElement("option");116 ????????????????????option.innerHTML = cityList[i];117 ????????????????????// 将创建的option元素添加到下拉列表最后118 ????????????????????displaySelect.appendChild(option);119 ????????????????}120 ????????????}121 ????????}122 ????}123 }124 // 指定页面加载完成后指定send函数125 document.body.onload = send;126 </script>127 </body>128 </html>

Ajax发送XML请求案例

原文地址:http://www.cnblogs.com/zhouyeqin/p/7453020.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved