Ajax发送XML请求
需求:
根据输入的国家,输出这些国家下面的城市。

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

  •  dom4j-1.6.1.jar
  •  jaxen-1.1-beta-6.jar
  •  pull-parser-2.1.10.jar

jar包参考下载地址: http://pan.baidu.com/s/1eS3X3DS

前端显示,并对返回结果信息进行解析:
程序清单:Ajax02request/xml/first.html

<!DOCTYPE html>
<html>
<head>
<meta name="author" content="silvan" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title> 发送XML请求 </title>
<style type="text/css">
select {
width: 120px;
font-size:11pt;
}
</style>
</head>
<body>
<!-- 支持多选的列表框 -->
<select name="first" id="first" size="5" multiple="multiple">
<option value="1" selected="selected">中国</option>
<option value="2">美国</option>
<option value="3">日本</option>
</select>
<!-- 用于发送Ajax请求的按钮 -->
<input type="button" value="发送" onClick="send();" />
<!-- 被级联改变的列表框 -->
<select name="second" id="second" size="5" ></select>
<script type="text/javascript">
String.prototype.trim = function()
{
return this.replace(/^\s+/ , "")
.replace(/\s+$/ , "");
}
// 保存XMLHttpRequest对象的变量
var xmlrequest;
function createXMLHttpRequest()
{
if(window.XMLHttpRequest)
{
// DOM 2浏览器
xmlrequest = new XMLHttpRequest();
}
// IE浏览器
else if (window.ActiveXObject)
{
try
{
xmlrequest = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
xmlrequest = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e){}
}
}
}
// 定义创建XML文档的函数
function createXML()
{
// 开始创建XML文档,countrys是根元素
var xml = "<countrys>" ;
// 获取first元素的,并获取起所有的子节点(选项)
var options = document.getElementById("first").childNodes;
var option = null ;
// 遍历国家下拉列表的所有选项
for (var i = 0 ; i < options.length; i ++)
{
option = options[i];
// 如果某个选项被选中
if (option.selected)
{
// 在countrys的根节点下增加一个country的子节点
xml = xml + "<country>" + option.value + "<\/country>";
}
}
// 结束XML文档的根节点
xml = xml + "<\/countrys>" ;
// 返回XML文档
return xml;
}
// 定义发送XML请求的函数
function send()
{
// 初始化XMLHttpRequest对象
createXMLHttpRequest();
// 定义请求发送的URL
var uri = "second.jsp";
// 打开与服务器连接
xmlrequest.open("POST", uri, true);
// 设置请求头
xmlrequest.setRequestHeader("Content-Type"
, "application/x-www-form-urlencoded");
// 指定当XMLHttpRequest对象状态发生改变时触发processResponse函数
xmlrequest.onreadystatechange = processResponse;
// 发送XML请求
xmlrequest.send(createXML());
}
// 处理服务器响应
function processResponse()
{
if(xmlrequest.readyState == 4)
{
if(xmlrequest.status == 200)
{
// 获取服务器响应字符串,并以$作为分隔符分割成多个字符串
var cityList = xmlrequest.responseText.split("$");
var displaySelect = document.getElementById("second");
// 清空second下拉列表的选项
displaySelect.innerHTML = null;
for (var i = 0 ; i < cityList.length ; i++)
{
if(cityList[i].trim().length > 0)
{
// 依次创建多个option元素
option = document.createElement("option");
option.innerHTML = cityList[i];
// 将创建的option元素添加到下拉列表最后
displaySelect.appendChild(option);
}
}
}
}
}
</script>
</body>
</html>

处理请求,返回结果信息:

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

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

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

  1. Ajax发送简单请求案例

    所谓简单请求,是指不包含任何参数的请求.这种请求通常用于自动刷新的应用,例如证券交易所的实时信息发送.这种请求通常用于公告性质的响应,公告性质的响应无需客户端的任何请求参数,而是由服务器根据业务数据自 ...

  2. AJAX发送异步请求教程详解

    AJAX 一.AJAX简介 什么是 AJAX ? AJAX = 异步 JavaScript 和 XML. AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可 ...

  3. 使用Ajax发送http请求(get&post请求)

    本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 同步和异步 同步和异步的概念 同步:必须等待前面的任务完成,才能继续后面 ...

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

    <黑马程序员_超全面的JavaWeb视频教程vedio\JavaWeb视频教程_day23_ajax> \JavaWeb视频教程_day23_ajax\day23ajax_avi\14.打 ...

  5. ajax发送PUT请求,使用HttpPutFormContentFilter过滤器接受办法

    相信在使用ajax发送put请求时候,肯定遇到过后端数据无法被接受到的405错误. 为什么会遇到这个问题? 1.首先查看Tomcat源码 关于如何将数据封装到Request public class ...

  6. Ajax发送Post请求

    Ajax发送post请求与发送get请求大致类似.以下看详细实例.首先看JSP显示页面: <form action="servlet/LoginServlet" method ...

  7. AJAX发送PUT请求引发的血案

    如果直接发送ajax=put形式的请求      是拿不到请求体中的数据的.           Tomcat:              1.将请求体中的数据,封装一个map             ...

  8. Ajax发送POST请求对数据的封装

    Ajax发送POST请求把数据到后端后,后端收到数据并解析出来 示列一: Ajax发送请求,这里主要是发送一个数组的数据类型到后端,如果没有先把数组进行格式化成字符串的话,后端就收了就是一个字符串类型 ...

  9. 原生JS实现ajax 发送post请求

    1. [代码]原生JS实现ajax 发送post请求 <script> var oStr = ''; var postData = {}; var oAjax = null; //post ...

随机推荐

  1. selenium实例学习地址

    一个完整的maven配置selenium webdriver工程实例   http://www.spasvo.com/ceshi/open/kygncsgj/Selenium/201312209580 ...

  2. Linux命令(七)——网络配置和网络通信

    在使用网络前,需要对linux主机进行基本的网络配置,配置后可以使该主机能够同其他主机进行正常的通信. 一.网络配置 1.ifcfg-ethn网络配置文件 所有的网络接口配置文件均存放在/etc/sy ...

  3. 对Java单继承的弥补——接口

    接口主要用来实现多重继承,它是常量和方法的集合,这些方法只有声明没有实现,即接口本身是抽象的,系统默认用abstract修饰. 1.接口的定义: public interface A{ int A=1 ...

  4. luogu1771 方程的解

    题目大意 对于不定方程a1+a2+…+ak-1+ak=g(x),其中k≥2且k∈N,x是正整数,g(x)=x^x mod 1000(即x^x除以1000的余数),x,k是给定的数.我们要求的是这个不定 ...

  5. Unsupported major.minor version 52.0 (unable to load class XXX

    java项目构建从高版本JDK改为低版本JDK报错.这是再次编译时使用的JDK版本比你原来编译的版本低所导致的. 转自:http://blog.csdn.net/zixiao217 maven项目在服 ...

  6. TexturePacker贴图打包工具

    1.该软件是收费的,不过对于这么一款实用的工具来说,物有所值,下载地址 http://www.codeandweb.com/texturepacker 2.openGL载入纹理图片的时候,所用内存是会 ...

  7. 几道leetcode不会做的题目

    1.set没有back()函数,今天想到用这个,才发现没有. 2. tuple的initialize_list construct好像不能使用,其实之前没使用过tuple,都是pair,复杂一点的自己 ...

  8. 4、Collection接口功能测试(所有的All方法)

    package cn.itcast_01; import java.util.ArrayList; import java.util.Collection; /* * 所有带All的方法:(听完就忘) ...

  9. Gitlab smtp 设置

    地址: https://blog.csdn.net/yongche_shi/article/details/78677163 # 腾讯云限制25发信端口,修改为465,并开启. https://doc ...

  10. 原生js仿淘宝手机购买选项代码

    这是一款基于原生js实现仿淘宝手机信息购买选项效果源码,界面整体效果仿照淘宝购物选项设计,点击不同选项还可实时显示不同的价格计算结果,界面简洁大方.美观实用.可兼容目前最新的各类主流浏览器. 在线演示 ...