jquery ajax学习笔记2 使用XMLHttpRequest对象的responseXML


Posted in Javascript onOctober 16, 2011

摘要:本节补充ajax学习笔记1中
第二种方式:使用XMLHttpRequest对象的responseXML的方式来接受XML数据对象的DOM对象
在ajax学习笔记1中已经对准备工作和需要用到的知识做了比较详细的介绍,本节主要介绍需要修改的代码以及新增的代码
.新增一个servlet类
AJAXXMLServer.java

import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.ServletException; 
import java.io.IOException; 
import java.io.PrintWriter; 
//XML的数据 
public class AJAXXMLServer extends HttpServlet { 
public void doGet(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException { 
//response.setContentType("text/html;charset=utf-8"); 
response.setContentType("text/xml;charset=utf-8"); //修改此次为text/xml 
PrintWriter out=response.getWriter(); 
//1.取参数 
String old=request.getParameter("name"); 
StringBuffer sb=new StringBuffer(); 
sb.append("<message>"); 
//2.检查是否有问题 
if(old==null||old.length()==0){ 
sb.append("用户名不能为空").append("</message>"); //拼装XML 
}else{ 
//3.校验操作 
String name=old; 
if(name.equals("pan")){ 
//4.和传统应用不同之处。这一步需要将用户感兴趣的数据返回给页面端,而不是将一个新的页面发送给用户 
//写法没有变,本质变了 
sb.append("用户名["+name+"]已经存在").append("</message>"); //拼装XML 
}else{ 
sb.append("用户名["+name+"]可以使用").append("</message>"); //拼装XML 
} 
} 
out.println(sb.toString());//注意,此句一定不能少了,并且注意放置的位置 
} 
public void doPost(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException { 
this.doGet(request,response); 
} 
}

.修改web.xml
加入AJAXXMLServer类的配置
web.xml
<servlet> 
<servlet-name>AJAXXMLServer</servlet-name> 
<servlet-class>AJAXXMLServer</servlet-class> 
</servlet> 
<servlet-mapping> 
<servlet-name>AJAXXMLServer</servlet-name> 
<url-pattern>/AJAXXMLServer</url-pattern> 
</servlet-mapping>

.修改verify.js文件
第一处:
把xmlhttp.open("GET","AJAXServer?name="+username,true);

改为
xmlhttp.open("GET","AJAXXMLServer?name="+username,true);//responseXML方式,修改类名

第二处:

responseText
//获取服务器端返回的数据 
//第一种方式:获取服务器端输出的纯文本数据 
//var responseText=xmlhttp.responseText; 
//将数据显示在页面上 通过dom的方式找到div标签对应的元素节点 
//var divNode=document.getElementById("result"); 
//设置元素节点中的html的内容 
//divNode.innerHTML=responseText;

改为:
responseXML
//第二种方式:使用responseXML的方式来接受XML数据对象的DOM对象 
var domObj = xmlhttp.responseXML; 
var messageNodes = domObj.getElementsByTagName("message"); 
//获取message节点中的文本内容 
//message标签中的文本是在dom中是message标签所对应的元素节点的子节点,firstChild可以获取当前节点的第一个子节点 
if (messageNodes.length > 0) { 
var textNode = messageNodes[0].firstChild; 
//对于文本节点来说,可以通过nodeValue的方式返回文本 
var responseMessage = textNode.nodeValue; 
//把值responseMessage显示在div上 
var divNode=document.getElementById("result"); 
divNode.innerHTML=responseMessage; 
} else { 
alert("XML数据格式错误,原始文本内容为:" + xmlhttp.responseText); 
}

第三处:

text/html
if(xmlhttp.overrideMimeType){ 
xmlhttp.overrideMimeType("text/html"); 
}

改为:
text/xml
if(xmlhttp.overrideMimeType){ 
xmlhttp.overrideMimeType("text/xml");//XML的方式时需要修改这个地方 
}

对于IE浏览器如果第三处不修改不会报错,但是对于firefox浏览器,如果此处不修改,以下语句会报错
var domObj = xmlhttp.responseXML;
可以通过增加alert语句来验证,IE浏览器的时候第三处修改的代码的if语句不会被执行,firefox浏览器的时候这个if语句就会被执行

说明:访问路径、运行截图与ajax学习笔记1中都是已经的,就省略了。

Javascript 相关文章推荐
javascript常用方法、属性集合及NodeList 和 HTMLCollection 的浏览器差异
Dec 25 Javascript
清除div下面的所有标签的方法
Feb 17 Javascript
JavaScript获取当前日期是星期几的方法
Apr 06 Javascript
WEB前端开发都应知道的jquery小技巧及jquery三个简写
Nov 15 Javascript
10个JavaScript中易犯小错误
Feb 14 Javascript
ES6新特性三: Generator(生成器)函数详解
Apr 21 Javascript
vue仿淘宝订单状态的tab切换效果
Jun 23 Javascript
vue里的data要用return返回的原因浅析
May 28 Javascript
Vue.js+cube-ui(Scroll组件)实现类似头条效果的横向滚动导航条
Jun 24 Javascript
JS控制只能输入数字并且最多允许小数点两位
Nov 24 Javascript
Vue实现多标签选择器
Nov 28 Javascript
Vue组件简易模拟实现购物车
Dec 21 Vue.js
jquery中ajax学习笔记一
Oct 16 #Javascript
jQuery EasyUI API 中文文档 DateTimeBox日期时间框
Oct 16 #Javascript
自己动手制作jquery插件之自动添加删除行功能介绍
Oct 14 #Javascript
javascript nextSibling 与 getNextElement(node) 使用介绍
Oct 13 #Javascript
获取body标签的两种方法
Oct 13 #Javascript
自己动手制作jquery插件之自动添加删除行的实现
Oct 13 #Javascript
jQuery EasyUI API 中文文档 - NumberBox数字框
Oct 13 #Javascript
You might like
改德生G88 - 加装等响度低音提升电路
2021/03/02 无线电
php数组索引的Key加引号和不加引号的区别
2014/08/19 PHP
php循环table实现一行两列显示的方法
2015/06/04 PHP
CL vs ForZe BO5 第三场 2.13
2021/03/10 DOTA
EXTJS内使用ACTIVEX控件引起崩溃问题的解决方法
2010/03/31 Javascript
JSONP 跨域访问代理API-yahooapis实现代码
2012/12/02 Javascript
关于jQuery对象数据缓存Cache原理以及jQuery.data详解
2013/04/07 Javascript
转义字符(\)对JavaScript中JSON.parse的影响概述
2013/07/17 Javascript
js展开闭合效果演示代码
2013/07/24 Javascript
基于JavaScript实现简单的随机抽奖小程序
2016/01/05 Javascript
JavaScript获取对象在页面中位置坐标的方法
2016/02/03 Javascript
实例讲解jquery中mouseleave和mouseout的区别
2016/02/17 Javascript
JS实现将Asp.Net的DateTime Json类型转换为标准时间的方法
2016/08/02 Javascript
js基于myFocus实现轮播图效果
2017/02/14 Javascript
Node.js进阶之核心模块https入门
2018/05/23 Javascript
微信小程序websocket实现即时聊天功能
2019/05/21 Javascript
js对象数组和对象的使用实例详解
2019/08/27 Javascript
vue界面发送表情的实现代码
2020/09/11 Javascript
vue打开其他项目页面并传入数据详解
2020/11/25 Vue.js
Python切片用法实例教程
2014/09/08 Python
详解Django缓存处理中Vary头部的使用
2015/07/24 Python
Python实现改变与矩形橡胶的线条的颜色代码示例
2018/01/05 Python
Python实现读写INI配置文件的方法示例
2018/06/09 Python
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
2018/07/27 Python
python实现的MySQL增删改查操作实例小结
2018/12/19 Python
用python打开摄像头并把图像传回qq邮箱(Pyinstaller打包)
2020/05/17 Python
查看keras的默认backend实现方式
2020/06/19 Python
HTML5有哪些新特征
2015/12/01 HTML / CSS
快时尚眼镜品牌,全国连锁眼镜店:LOHO眼镜生活
2018/10/08 全球购物
创建绿色学校先进个人材料
2014/08/20 职场文书
2014年单位法制宣传日活动总结
2014/11/01 职场文书
2014小学语文教师个人工作总结
2014/12/03 职场文书
检讨书范文300字
2015/01/28 职场文书
2015年房产销售工作总结范文
2015/05/22 职场文书
逃出克隆岛观后感
2015/06/09 职场文书
Win11 S Mode版本泄露 正式上线后叫做Windows 11 SE
2021/11/21 数码科技