AJAX发送XML

smallpig_zyw_tianmin 2009-12-22 07:55:06
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title> 发送XML请求 </title>
<meta name="author" content="Yeeku.H.Lee" />
<meta name="website" content="http://www.leegang.org" />
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
</head>
<body>
<!-- 支持多选的列表框 -->
<select name="first" id="first"
style="width:80px" size="3" 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" style="width:100px" size="5" />
</select>
<script type="text/javascript">
//保存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()
{
//初始化XMLHttpRequest对象
createXMLHttpRequest();
//开始创建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()
{
//定义请求发送的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++)
{
//依次创建多个option元素
option = document.createElement("option");
option.innerHTML = cityList[i];
//将创建的option元素添加到下拉列表最后
displaySelect.appendChild(option);
}
}
}
}
</script>
</body>
</html>
=========================================================================================
<%@ page contentType="text/html; charset=GBK" language="java" %>
<%@ page import="java.io.*,org.dom4j.*,org.dom4j.io.XPPReader,java.util.*"%>
<%
//定义一个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);
%>
-----------------------------------
两个页面,first.html为客户端页面,second.html为服务端页面。
出现错误,他 说我xmlrequest没有定义,可我定义了,不知道哪里错了
...全文
250 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
gjsong 2009-12-23
  • 打赏
  • 举报
回复
支持3楼 ajax发送请求第一步要创建xmlrequest,之后才能用!
  • 打赏
  • 举报
回复
不懂,帮顶
crazylaa 2009-12-23
  • 打赏
  • 举报
回复
xmlrequest.send(createXML());
逻辑问题,在createXML()里面才调用createXMLHttpRequest创建的xmlrequest,前面又要用它。
你这是拿个null在send啊。
把createXML()里面的这句
createXMLHttpRequest();
放在functioin createXML(){****}前面或后面都行,只要不被任何一个方法包进去
skyboxgogo 2009-12-22
  • 打赏
  • 举报
回复
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){}
}
}
}();


有时,ajax对象要在页面加载时就要创建,试试window.onload=createXMLHttpRequest;



xmlrequest.send(null);
孟子E章 2009-12-22
  • 打赏
  • 举报
回复
var xmlrequest = null;
....

createXMLHttpRequest();
if(xmlrequest == null)
{
alert("无法创建xmlhttp")
return;
}

试试

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧