Ajax发送XML请求案例

如果请求参数较多,而且请求参数的结构关系复杂,则可以考虑发送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>
时间: 2024-10-15 06:10:11

Ajax发送XML请求案例的相关文章

使用原生ajax发送post请求完整案例

使用ajax发送数据实现前后台的交互,我想是web开发最基础的技能了.近来dz开发因为不兼容jquery,所以只能使用原生js发送数据,不想还遇到很多问题.在这里分析总结一下.先来一个使用ajax发送post表单数据的案例. <html> <head> <title> ajax发送post请求实例 </title> </head> <body> <form method="post" action="

AJAX的来龙去脉(由来)-如果被封装出来的--ajax发送异步请求(四步操作)

<黑马程序员_超全面的JavaWeb视频教程vedio\JavaWeb视频教程_day23_ajax> \JavaWeb视频教程_day23_ajax\day23ajax_avi\14.打包ajax生成小工具.avi;  有介绍: 个人理解:就是封装了 XMLHttpRequest 的请求方法:演变而成我们常用的 ajax: =====原始的请求方式: ajax发送异步请求(四步操作) 1. 第一步(得到XMLHttpRequest) * ajax其实只需要学习一个对象:XMLHttpRequ

Ajax发送GET请求

这里用一个实例演示Ajax发送get请求,实例具体要求为一个注册页面,当用户填写完用户名称时,该输入框失去焦点后会通过Ajax向后台发送验证信息,如果用户名不是admin则通过验证,否则不通过验证. 下面先看JSP页面具体信息: <form action="servlet/LoginServlet" method="post"> <table> <tr> <td>用户账号:</td> <td>&

Ajax发送post请求

//创建Ajax对象(兼容处理) function createXHR() { var xhr = null; if(window.XMLHttpRequest) { xhr = new XMLHttpRequest(); } else if(window.ActiveXObject) { xhr = new ActiveXObject('Microsoft.XMLHTTP'); } return xhr; } //发送post请求 function request(){ xhr.open('P

JavaScript之Ajax-2 Ajax(使用Ajax发送get请求、使用Ajax发送post请求)

一.使用Ajax发送get请求 发送异步请求的步骤 - 获取Ajax对象:获取 XMLHttpRequest对象实例 - 创建请求:调用XMLHTTPRequest对象的open方法 - 设置回调函数:为Ajax对象的 onreadystatechange事件设定响应函数 - 发送请求:调用Ajax对象的send方法 - 获取Ajax对象     - 创建请求 - 注意: - true:表示发送异步请求(当Ajax对象发送请求时,用户仍然可以对当前页面做其它的操作) - false:表示发送同步

XMLHttpRequest发送XML请求

1.前言 对于请求参数为大师key-value对的情形,笔者更加倾向于使用简单的POST请求.但对于某些极端的表形,如请求参数特别多,而且请求参数的结构关系复杂,则可以考虑发送XML请求.XML请求的实质还是POST请求,只是在发送请求的客户产端页面将请求参数封装成XML字符串的形式,服务器则负责解析XML字符串.当然,服务器获取到XML字符串后,可借助dom4j或JDOM等工具来解析. 2.例子 这个例子还是跟前面所讲的一样,通过左边的点击国家,然后点击"发送",右边 就可以看到国家

IT兄弟连 JavaWeb教程 使用AJAX发送POST请求并获取响应

POST请求用于向服务器发送应该被保存的数据,因此POST请求天然比GET请求多需要一份需要被保存的数据.那么这些数据应该放在何处呢?毕竟,我们的open()方法接收的三个参数都没有合适的位置. 答案是需要发送的数据会作为send()方法的参数最终被发往服务器,该数据可以是任意大小,任意类型. 使用Ajax发送POST请求需要使用setRequestHeader()方法设置请求头,代码如下: function PostRequest(){ var xhr = null; if(window.XM

使用Ajax发送异步请求的步骤

1.获取Ajax对象:获取XMLHttpRequest对象实例 function getXhr(){ var xhr = null; if(window.XMLHttpRequest){ xhr = new XMLHttpRequest();//非IE浏览器 }else{ xhr = new ActiveXObject('Microsoft.XMLHttp');//IE浏览器 } return xhr; } 2.设置回调函数:为Ajax对象的readystatechange事件设定响应函数 xh

jquery中使用ajax发送post请求变成get请求

今天在进行js开发的过程中出现了一个奇怪的问题,就是使用ajax向后端发送post请求时,在浏览器network中查看response时,显示400 bad request 并且请求方式变成get,因为本人不专前端,所以甚是疑惑,百般寻找答案无果,已经排除不是jsonp 跨域请求(据说js中跨域只能进行get请求,如果是post请求会请求转化为get请求) 各种寻找后,看到一个极老的帖子,也是同样的问题,而且有一个网友也翻到了这个几年前的帖子,并且留了言,说是因为静态资源文件的url和后端服务u