(转)JAVA AJAX教程第三章—AJAX详细讲解
现在开始深入AJAX,这里还是按老思路,理论和实践相结合。这章的内容主要是讲解AJAX步骤详解,下一张将会用一个AJAX技术实现页面提示效果的实例来说明AJAX的实现。
一、AJAX步骤详解
AJAX实质上是遵循Request/Server模式来进行工作的,这个框架基本的流程包括下面几个具体的步骤:
(1) XMLHttpRequest对象初始化
(2) 发送请求
(3) 服务器接收请求并进行处理
(4) 服务器返回响应数据
(5) 客户端接收
(6) 依据响应数据修改客户端页面内容
整个过程中的通信交互方式都是异步的。下面根据具体步骤讲解AJAX的核心工作机制:
1、 初始化并创建XMLHttpRequest对象并发出XMLHttpRequest请求
为了让JAVASCRIPT可以向服务器发送HTTP请求,必须使用XMLHttpRequest对象。使用之前,要先将XMLHttpRequest对象实例化。各个浏览器对这个实例化过程实现不公。IE浏览器以AcitiveX控件的形式提供,而Mozilla浏览器等浏览器则直接以XMLHttpRequest类的形式提供。所以在第一章为了编写的程序可以跨浏览器运行,这样写:
if(window.XMLHttpRequest){
XMLHttpReq = new XMLHttpRequest();
}else if(window.ActiveXObject){
try{
XMLHttpReq = new ActiveXObject("MSXML2.XMLHTTP");
}catch(e){
try{
XMLHttpReq = new ActiveXObject("Mircsoft.XMLHTTP");
}catch(e1){}
}
}
另外,有些Mozilla浏览器处理服务器信息未包含XML mime-type头部信息的返回内容时会出错。因此,要确保返回的内容包含text/xml信息:
XMLHttpRequest = new XMLHttpRequest();
XMLHttpRequest.overrideMimeType(“text/xml”);
2、 指定响应处理函数
下来要指定当前服务器返回信息时客户端的处理方式,只要将相应的处理函数名称赋给XMLHttpRequest对象的onreadystatechange属性就可以了。比如:
XMLHttpRequest.onreadystatechange = processResponse;
需要注意,这个函数名不加括号,不指定参数。也可以用JAVASCRIPT即时定义函数的方式定义相应函数。比如:
XMLHttpRequest.onreadystatechange = function () { };
3、 发出HTTP请求
指定响应处理函数之后,就可以向服务器发送HTTP请求了。这一部调用了XMLHttpRequest对象的open和send方法。
XMLHttpRequest.open(“GET”,url,true);
XMLHttpRequest.send(null);//发送请求
Open的第一参数是HTTP请求的方法,为GET、POST或者Head。Open的第二个参数是目标URL。基于安全考虑,这个URL只能是同网域的,否则提示“没有权限”的错误。目标URL处理请求XMLHttpRequest请求则跟处理普通的HTTP请求一样,比如JSP可以用request.getParameter(“”)或者request.getAttribute(“”)来取得URL参数值。Open的第三个参数只是指定在等待服务器返回信息的时间内是否继续执行下面的代码。如果为ture,则不会继续执行,直到服务器返回信息。默认为true。
按照顺序,open调用完毕之后要调用send方法。Send的参数如果是以POST方式发出的话,可以是任何想传给服务器的内容。
4、 处理服务器返回的信息
首先,检查XMLHttpRequest的readyState值,判断请求目前的状态。参照前面的属性表可以知道,readyState值为4时,代表服务器已经传回所有的信息,可以开始处理信息并更新页面内容了。例如:
if(XMLHttpReq.readyState == 4){
//信息已返回,可以开始处理
}else{
//信息还未返回,等待
}
信息返回后还需判断HTTP状态码,确定返回的页面没有错误。其中200代表页面正常,基本程序如下:
if(XMLHttpReq.status == 200){
//页面正常,可以开始处理信息
}else{
//页面有问题
}
XMLHttpRequest对成功返回的信息有两种处理方式,一种为responseText,即将传回的信息当字符串使用;另一种为reponseXML,即将传回的信息当XML文档使用,可以使用DOM处理。
总结以上的步骤我们就可以整个出一个初步的AJAX开发框架,供以后调用了。例子代码如下,以后只需在其中改变具体的数据:
<script language="javascript">
var XMLHttpReq = false;
function createXMLHttpRequest(){
if(window.XMLHttpRequest){
XMLHttpReq = new XMLHttpRequest();
}else if(window.ActiveXObject){
try{
XMLHttpReq = new ActiveXObject("MSXML2.XMLHTTP");
}catch(e){
try{
XMLHttpReq = new ActiveXObject("Mircsoft.XMLHTTP");
}catch(e1){}
}
}
}
function sendRequest(url){
//创建XMLHttpRequest对象
createXMLHttpRequest();
//调用open方法
XMLHttpReq.open("GET",url,true);
//指定服务器返回信息时客户端的处理函数
XMLHttpReq.onreadystatechange = processResponse;
//向服务器发送请求
XMLHttpReq.send(null);
}
function processResponse(){
//判断相应情况
if(XMLHttpReq.readyState == 4){
//判断HTTP状态码
if(XMLHttpReq.status == 200){
var res = XMLHttpReq.responseXML.getElementsByTagName("res")[0].firstChild.data;
window.alert(res);
document.myform.uname.value="";
document.myform.pwd.value="";
}else{
window.alert("你请求的页面有异常");
}
}
}
function userCheck(){
var uname = document.myform.uname.value;
var pwd = document.myform.pwd.value;
if(uname == ""){
window.alert("用户名不能为空");
document.myform.pwd.value="";
document.myform.uname.focus();
return false;
}else{
//调用AJAX初步框架
sendRequest("login?uname="+uname+"&pwd="+pwd);
}
}
</script>
(转)JAVA AJAX教程第三章—AJAX详细讲解的更多相关文章
- (转)JAVA AJAX教程第四章—AJAX和MVC的简单结合
这里我们再理解了AJAX后,开始来用实例感受AJAX的力量. 今天我最后要实现的效果,当鼠标放到图片上时会根据,会把数据库库里的数据读出,通过显示框显示出来.这个在很多网上商店都有用到这里效果,我们这 ...
- [ABP教程]第三章 创建、更新和删除图书
Web应用程序开发教程 - 第三章: 创建,更新和删除图书 关于本教程 在本系列教程中, 你将构建一个名为 Acme.BookStore 的用于管理书籍及其作者列表的基于ABP的应用程序. 它是使用以 ...
- [Learn Android Studio 汉化教程]第三章:使用 Android Studio 编程
[Learn Android Studio 汉化教程]第三章:使用 Android Studio 编程 本章包含如何在 Android Studio 中书写或生成代码. Android Studio ...
- Objective-C 基础教程第三章,面向对象编程基础知
目录 Objective-C 基础教程第三章,面向对象编程基础知 0x00 前言 0x01 间接(indirection) 0x02 面向对象编程中使用间接 面向过程编程 面向对象编程 0x03 OC ...
- 《Java程序设计》第三章-基础语法
20145221<Java程序设计>第三章-基础语法 总结 教材学习内容总结 类型.变量与运算符 类型 Java可区分为基本类型(Primitive Type)和类类型(Class Typ ...
- “全栈2019”Java第一百零三章:匿名内部类详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- javascript进阶教程第三章--匿名和闭包--案例实战
javascript进阶教程第三章--匿名和闭包--案例实战 一.学习任务 通过几个小练习回顾学过的知识点 二.实例 练习1: 实例描述:打开页面后规定时间内弹出一个新窗口,新窗口指定时间后自动关闭. ...
- 脚本语言丨Batch入门教程第三章:逻辑判断
通过学习Batch入门教程的前两章内容,我们已经大致掌握了基本概念和认识变量的相关内容,今天我们要跟大家继续分享第三章内容:Batch入门教程之逻辑判断. 前期回顾 ◀Batch入门教程丨部署与H ...
- 《深入理解java虚拟机》第三章 垃圾收集器与内存分配策略
第三章 垃圾收集器与内存分配策略 3.1 概述 哪些内存需要回收 何时回收 如何回收 程序计数器.虚拟机栈.本地方法栈3个区域随线程而生灭. java堆和方法区的内存需要回收. 3.2 对象已死吗 ...
随机推荐
- MyBatis动态SQL详解
MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑. MyBatis中用于实现动态SQL的元素主要有: if choose(when,otherwise) ...
- 解决英文或数字在HTMl网页中不自动换行。
对于网页设计的新手而言,在接触一段时间的HTML/CSS后,一定会遇到这样的问题:对于已经定义了宽度的容器(如DIV,TD,段落等)如果里面出现了较长的英文或数字,则内容不能自动换行然后会将框架撑出设 ...
- java练手 韩信点兵
Problem C 韩信点兵 时间限制:3000 ms | 内存限制:65535 KB 描述 相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排.五人一排.七人一排地变换队 ...
- Swift2.1 语法指南——析构过程
原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programmi ...
- Ehcache与Guava Cache的区别浅谈
最近在做一些缓存改造的场景,有如下一些经验总结: 缓存版本: Ehcache:2.8.3 Guava:17.0 Ehcache支持持久化到本地磁盘,Guava不可以: Ehcache有现成的集群解决方 ...
- 用hexo书写github.io博客 学习心得 教程
很久没更新文章了,除了工作忙之外,可能就是自己懒惰了. 最近混迹与github,发现git上写博客也是个很不错的平台. 推荐使用 hexo 模版来书写,毕竟我们重点是写文章,而不是管理,所以有神奇何妨 ...
- HDU 5120 Intersection(2014北京赛区现场赛I题 计算几何)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5120 解题报告:给你两个完全相同的圆环,要你求这两个圆环相交的部分面积是多少? 题意看了好久没懂.圆环 ...
- 500 OOPS: vsftpd: both local and anonymous access
配置ftp服务器,有如下报错 C:\netos74\bin>ftp 10.20.100.252Connected to 10.20.100.252.500 OOPS: vsftpd: both ...
- Android 中 SQLite 数据库的查看
当 SQLite 数据库创建完成后,如何查看数据库的内容呢?如果直接使用 File Explorer 查看,最多只能看到 database 目录下出现了一个 BookStore.db 文件,Book ...
- 26 BasicUsageEnvironment基本使用环境——Live555源码阅读(三)UsageEnvironment
26 BasicUsageEnvironment基本使用环境--Live555源码阅读(三)UsageEnvironment 26 BasicUsageEnvironment基本使用环境--Live5 ...