在Servlet中返回xml格式的数据,用jQuery的html方法取值,alert出来的是'undefined', 请问这是什么原因, 谢谢

JimmyLincole 2013-09-28 11:32:16
后台代码:
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Validation extends HttpServlet {

private static final long serialVersionUID = 5873405129982361860L;

protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}

protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 获取参数前, 需要设置编码
request.setCharacterEncoding("utf-8");

// 设置返回的格式为xml
// response.setContentType("text/xml;charset=utf-8");

// 设置禁止缓存
response.setHeader("Cache-Control", "no-cache, must-revalidate");

// 验证用户名是否已经存在
validate(request, response);
}

private void validate(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 设置返回的格式为xml
response.setContentType("text/xml;charset=utf-8");

PrintWriter out = response.getWriter();

String message = "";
String username = request.getParameter("username");

if("aaa".equals(username) || "bbb".equalsIgnoreCase(username)) {
System.out.println("已经存在");
message = "<result><message>用户名" + username + "已存在!</message></result>";
} else {
message = "<result><message>恭喜, 用户名" + username + "可以注册!</message></result>";

}

out.println(message);
}

}


============================== 郁闷的分隔线 =========================================

jsp代码:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="/common.jsp" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>处理返回值为xml格式</title>

<script type="text/javascript" src="${contextPath}/js/jquery-1.3.1.js"></script>

<script type="text/javascript">

// ajax引擎
var xmlHttpRequest;

// 创建ajax引擎
function getXMLHttpRequest() {
// 不同浏览器获取XMLHttpRequest对象方法不同
if(window.ActiveXObject) {
// IE
xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
} else if(window.XMLHttpRequest) {
// 火狐, google等非IE
xmlHttpRequest = new XMLHttpRequest();
}
}

// 检查用户名是否已经存在(提交数据到后台)
function checkName() {
// 获得ajax引擎
getXMLHttpRequest();

// 判断ajax引擎是否创建成功
if(xmlHttpRequest) {
// 引擎创建成功, 执行下面代码
// 通过该引擎对象发送请求到服务器的某个页面

// post提交方式
var username = "username=" + $("#username").val();
var url = "${contextPath}/servlet/validation";

xmlHttpRequest.open("post", url, true);
xmlHttpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

// 指定回调方法, 处理返回值
// 状态改变了四次
xmlHttpRequest.onreadystatechange = deal;

// 真正发送请求
xmlHttpRequest.send(username);
}
}

// 回调方法, 处理返回值
function deal() {
// 我们只关心完成的那个状态
if(4 == xmlHttpRequest.readyState) {
if(200 == xmlHttpRequest.status) {
// 找到message标签(节点), 然后取出第一个节点元素
// 把DOM对象转换成jQuery对象
var message = $(xmlHttpRequest.responseXML.getElementsByTagName("message")[0]);

// 用html获取, 提示undefined!!!!
// var result = message.html();

var result = message.text();
$("#result").html(result);
}
}
}

// 页面装载完成后运行
$(function() {
$("#validate").click(function() {
checkName();
});
});
</script>
</head>

<body>
<form action="${contextPath}/servlet/validation" method="post">
用户名:
<input type="text" name="username" id="username" size="20">
<input type="button" id="validate" value="验证用户名">
<div id="result" style=" display:inline; color:red;"></div>
<br/>
密    码:
<input type="password" name="password" size="21"><br>
<input type="submit" value="用户注册">
</form>
</body>
</html>


============================== 苦恼的分隔线 =========================================

请问,这是什么原因导致的呢?? jQuery手册上有这和一句话:"取得第一个匹配元素的html内容。这个函数不能用于XML文档。但可以用于XHTML文档。" 请问是这原因么??
...全文
197 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Go 旅城通票 2013-09-29
  • 打赏
  • 举报
回复
取得第一个匹配元素的html内容。这个函数不能用于XML文档。但可以用于XHTML文档。
----------------
不是说了,不支持xml文档使用此方法。。xhtml文档还是html文档,只是按照xml的规范来编写的html文档



调用html方法应该会报错吧。。我这里1.4.2的jquery报错了,因为
this[0].innerHTML.replace(rinlinejQuery, "") :

这句,XML文档没有innerHTML属性,html文档有,所以获取null后再使用replace就报错了
JimmyLincole 2013-09-29
  • 打赏
  • 举报
回复
引用 2 楼 showbo 的回复:
取得第一个匹配元素的html内容。这个函数不能用于XML文档。但可以用于XHTML文档。 ---------------- 不是说了,不支持xml文档使用此方法。。xhtml文档还是html文档,只是按照xml的规范来编写的html文档 调用html方法应该会报错吧。。我这里1.4.2的jquery报错了,因为 this[0].innerHTML.replace(rinlinejQuery, "") : 这句,XML文档没有innerHTML属性,html文档有,所以获取null后再使用replace就报错了
谢谢
JimmyLincole 2013-09-28
  • 打赏
  • 举报
回复
求解决呀

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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