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();// 定义请求发送的URLvar 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)        运行结果

XMLHttpRequest发送XML请求相关推荐

  1. 【JavaScript】使用XMLHttpRequest发送网络请求

    在前端的开发中,有时候没有一些库的支持,如jQuery,Axios.那么就只能使用js提供的原生的方法来发送请求.在这里记录一下我的使用 var url = "userInfo.do?p=4 ...

  2. JS原生:XMLHttpRequest发送GETPOST请求

    目录 1.XMLHttpRequest   (xhr) 2.使用xhr发起GET无参请求 3.使用xhr发起GET有参请求 4.使用xhr发起POST请求 学到了xhr发起GET和POST请求,在此记 ...

  3. apache httpclient 连接 IIB,发送XML请求

    在Message Broker Toolkit建立好消息流之后,需要Java发送请求到ESB服务器,触发消息流的响应,执行消息流之后再返回响应 java端发送请求用到的是apache httpclie ...

  4. 如何通过JavaScript发送http请求

    JavaScript 是一种广泛使用的编程语言,可用于创建丰富的互联网应用程序.其中之一的常见任务是与后端服务器进行通信,以获取或发送数据.在本文中,我们将讨论如何使用 JavaScript 发送 H ...

  5. 5种最流行的发送HTTP请求的方法

    现代Javascript提供了许多向远程服务器发送HTTP请求的方法.从原生XMLHttpRequest对象到Axios等第三方库,拥有如此丰富的选择集合使得在web应用程序中请求和动态加载内容比以往 ...

  6. Ajax--概述、xhr对象的常用属性和方法、xhr的常用事件、xhr对象发送POST请求、xhr对象发送GET请求、xhr对象的兼容性问题、数据交换格式(XML、JSON)

    一.概述 1.1 发展历程 在开始之前先来看一下Ajax的工作原理吧,如下图所示: Ajax全称Asynchronous javascript and xml(异步 JavaScript 和 XML) ...

  7. vue发送Http请求之XMLHttpRequest

    浏览器报错:Cannot read property 'push' of undefined at XMLHttpRequest.ajaxObj.onreadyst vue中发送Http请求,这里说明 ...

  8. java post xmll_HttpClient发送Post请求,内容格式为xml,并获取响应内容

    ChannelDistributor.xml 内容如下: yisou abcd1234 10010000 00 1).HttpClient发送Post请求,内容格式为xml,并获取响应内容 impor ...

  9. SSM中通过okhttp3向接口发送xml格式的请求参数

    场景 在SSM项目中的后台Controller中需要想asp的接口发送xml格式的请求参数. 依据接口文档示例代码. 入参: <Request><ServiceCode>get ...

  10. 原生html如何发送网络请求,原生JS发送HTTP请求的方式:XMLHttpRequest.send()

    在前端开发过程中,就目前来看,发送HTTP请求,大家习惯在框架里去应用,比如vue,react等.我们在往前追朔下,用的最多的是jQuery里的ajax.但是最原始的发送HTTP请求方式是什么呢?一起 ...

最新文章

  1. 高校疯传!法国TOP双硕算法专家匠心打造一套保姆级AI学习笔记并公开(保姆级/20G高清/PPT/代码)...
  2. 继LSTM之父用世界模型来模拟2D赛车后,谷歌又推出全新世界模型助力导航:360度无死角,就问你怕了没?...
  3. VS2005 / windows sdk7.1配置
  4. QQ牧场在高速模式下的一些小bug
  5. js date 当前日志往后一个月_【应用实例】如何利用 Python 生成器 yield 监控日志?...
  6. 《数据库系统实训》实验报告——子查询与组合查询
  7. luogu1341 无序字母对
  8. SQL Server 20082005维护计划对比
  9. java启动mysq服务_Java Web开发——MySQL数据库的安装与配置
  10. PC-[WIN7]此计算机无法联接家庭组
  11. r语言 array c函数,R语言 数组
  12. GAD游戏学院系列丛书发布,引爆峰会现场
  13. vue2.0 实现导航守卫(路由守卫)
  14. proDAD Mercalli 2020V5.0.461注册激活码版视频稳定防抖软件
  15. 用户界面之工具栏详解-AutoRunner自动化测试工具
  16. php 队列创建,php 队列的实现方法
  17. / ./ ../相对路径详细解释
  18. 导数的四则运算法则_高中生如何学习导数
  19. EIGRP优化—末节路由简介
  20. Android LruCache和DiskLruCache相结合打造图片加载框架(仿微信图片选择,照片墙)

热门文章

  1. ADO.NET调用存储过程
  2. [bzoj3670] [NOI2014] [lg2375] 动物园
  3. UILAbel 设置了attributedText 后省略号不显示
  4. modelsim+win环境下systemverilog调用c函数
  5. 修改DevExpress中英文提示,将英文改为中文
  6. EXTI外部中断触发:神舟IV
  7. js中数组(Array)的排序(sort)注意事项
  8. 深信服AC本地用户密码认证配置
  9. HCIE-Security Day10:6个实验理解VRRP与可靠性
  10. python列表题目_python4_list应用的练习题