XMLHttpRequest发送XML请求

1.前言

对于请求参数为大师key-value对的情形,笔者更加倾向于使用简单的POST请求。但对于某些极端的表形,如请求参数特别多,而且请求参数的结构关系复杂,则可以考虑发送XML请求。XML请求的实质还是POST请求,只是在发送请求的客户产端页面将请求参数封装成XML字符串的形式,服务器则负责解析XML字符串。当然,服务器获取到XML字符串后,可借助dom4j或JDOM等工具来解析。

2.例子

这个例子还是跟前面所讲的一样,通过左边的点击国家,然后点击“发送“,右边 就可以看到国家的城市。不过这一次,我偿们以送有是XML的文件形式。(源码)

1)        在first.html的页面中创建XML文档的函数,发送时以<countrys><country>XXX</country></countrys>的形式来以送。

 // 定义创建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;
}

2)        定义发送的函数

// 定义发送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());
}

3)        定义回调函数

// 处理服务器响应
function processResponse()
{
	if(xmlrequest.readyState == 4)
	{
		if(xmlrequest.status == 200)
		{
			// 获取服务器响应字符串,并以$作为分隔符分割成多个字符串
			//alert(xmlrequest.responseText);
			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);
				}
			}
		}
	}
}

4)        在sencod.jsp的页面中,使用Dom4j来解析XML的格式。

// 定义一个StringBuffer对象,用于接收请求参数
StringBuffer xmlBuffer = new StringBuffer();
String line = null;
// 通过request对象获取输入流
BufferedReader reader = request.getReader();
// 依次读取请求输入流的数据
while((line = reader.readLine()) != null )
{
	System.out.println("==="+line);
	xmlBuffer.append(line);
}
// 将从输入流中读取到的内容转换为字符串
String xml = xmlBuffer.toString();
// 以Dom4J开始解析XML字串串
Document xmlDoc = new XPPReader().read(
	new ByteArrayInputStream(xml.getBytes()));
// 获得countrys节点的所有子节点
List countryList = xmlDoc.getRootElement().elements();

5)        运行结果

时间: 2024-08-28 23:37:04

XMLHttpRequest发送XML请求的相关文章

Ajax发送XML请求案例

如果请求参数较多,而且请求参数的结构关系复杂,则可以考虑发送XML请求.XML请求的实质还是POST请求,只是在发送请求的客户端页面将请求参数封装成XML字符串的形式,服务器端则负责解析该XML字符串.当然,服务器获取到XML字符串后,可借助于dom4j或JDOM等工具来解析. 程序清单:Ajax02request/xml/second.jsp 1 <%@ page contentType="text/html; charset=UTF-8" language="jav

使用xmlHttprequest 发送异步请求(Ajax核心对象)

1.创建XMlHtttpRequest对象 因为浏览器不同载入xmlHttpRequst的方式也不一样 IE中:var  xmlhttp=new ActiveXObject("MSXML2.XMLHTTP"); 其他浏览器:var  xmlhttp=new  XMLHttpRequest(); 2.对onreadystatechange事件追加方法 当xmlhttp.readystate 状态改变时会自动触发这个事件 readystate可能出现的五种状态: 0:未初始化:XMLHtt

XMLHttpRequest发送POST请求

1.前言 POST请求的适用性更广,可使用更大的请求参数,而且POST请求的请求参数通常不能直接看到.因此在使用Ajax发送请求时,尽量采用POST方式而不是GET方式发送请求.发送POST请求通常需要如下的三个步骤: 1)        使用open方法打开连接时,指定使用POST方式发送请求. 2)        设置正确的请求头,POST请求通常应设置Content-Type请求头 3)        发送请求,把请求参数转换为查询字符串,将字符串作为send()方法请求参数. 2.例子

服务端发送xml请求java代码示例

/** * */ package com.autoyol.pay.cmb.core; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.SocketTimeoutException; import ja

XMLHttpRequest发送JSON请求

1.前言 现在Ajax技术已逐步使用JSON响应来获取传统的XML响应.当服务器响应数据量较大,而且响应数据有复杂的结构关系时,使用JSON响应是很好的选择. 2.例子 下面的例子示范一个用户根据种类查看图书的示例,该服务器响应是N本图书信息,它们具有数据量较大,而且具有复杂的结构关系的特征,为此考虑使用JSON响应进行处理. (源码) 1)        下面是提供服务器相应的Servlet代码. @WebServlet(urlPatterns={"/chooseBook"}) pu

php 向asmx发送请求 || php 发送xml请求, 以及处理返回的xml结果

var $live_url = 'https://processing.ukash.com/RPPGateway/process.asmx'; $source = array( 'SecurityToken' => $res[0]->merchant_name, 'BrandID' => $res[0]->merchant_key2, 'UTID' => $UTID, ); $soap = new SoapClient($this->live_url.'?wsdl');

Webpack运行后,XMLHttpRequest发送带参请求,后台$_POST没有数据

环境: 打包工具: Webpack: 整合软件包: WAMP: 编辑器:VsCode: Webpack虚拟出的端口号是8080,本地Apache的端口号是80 问题重现: JS代码,使用FormData对象作为传输数据的格式: function postData() { var formData = new FormData(); formData.append("data", JSON.stringify({name:'xxx', age:20})); function xhrReq

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>&