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. 蚂蚁森林合种计划(2020.10.31,7天有效,每周更新)
  2. R语言vtreat包自动处理dataframe的缺失值、计算数据列的均值和方差并基于均值和方差信息对数据列进行标准化缩放、计算所有数据列的均值和方差对所有数据列进行标准化缩放
  3. MR-CNN网络结构
  4. lnmp 切换mysql 版本_LNMP1.5:php多版本切换
  5. 深度学习入门教程UFLDL学习实验笔记一:稀疏自编码器
  6. SLAM知识[7]:依赖项和安装
  7. 解决 VUE: [Vue warn]: Do not use built-in or reserved HTML elements as component id: xx
  8. inittab文件剖析[CentOS 5.X](第二版)
  9. 用MVC来实现javaScript的时间效果
  10. 用Dart搭建HTTP服务器(1)
  11. HDOJ1005(找循环节点)
  12. 为何高端FPGA都非常重视软件
  13. 一二线城市知名IT互联网公司名单!
  14. 红米Note8手机图纸-电路原理图+主板元件位号图
  15. unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)
  16. 什么是计算机科学中的“本体论”
  17. AppleScript(0) : 文档与语法
  18. Telltale:简化了Netflix应用程序监视
  19. 您的项目已获得 1000 枚 Star !
  20. Android登录界面用SharedPreferences实现记住密码功能

热门文章

  1. React Native状态机和应用设计思路
  2. 使用PowerDesigner进行面向对象分析与UML建模(转)
  3. javascript实现跳转菜单
  4. C/C++ 基础算法1
  5. C++11中的std::function和std::bind
  6. 游戏筑基开发之字符串、字符指针、字符数组的相关知识梳理(C语言)
  7. H3C大规模路由综合实验
  8. windows 10安装python2.7、python3.6并配置环境变量
  9. git报错之fatal: protocol error: bad line length character: No This
  10. 硬盘数据恢复的神器有哪些