现在开始深入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详细讲解的更多相关文章

  1. (转)JAVA AJAX教程第四章—AJAX和MVC的简单结合

    这里我们再理解了AJAX后,开始来用实例感受AJAX的力量. 今天我最后要实现的效果,当鼠标放到图片上时会根据,会把数据库库里的数据读出,通过显示框显示出来.这个在很多网上商店都有用到这里效果,我们这 ...

  2. [ABP教程]第三章 创建、更新和删除图书

    Web应用程序开发教程 - 第三章: 创建,更新和删除图书 关于本教程 在本系列教程中, 你将构建一个名为 Acme.BookStore 的用于管理书籍及其作者列表的基于ABP的应用程序. 它是使用以 ...

  3. [Learn Android Studio 汉化教程]第三章:使用 Android Studio 编程

    [Learn Android Studio 汉化教程]第三章:使用 Android Studio 编程 本章包含如何在 Android Studio 中书写或生成代码. Android Studio ...

  4. Objective-C 基础教程第三章,面向对象编程基础知

    目录 Objective-C 基础教程第三章,面向对象编程基础知 0x00 前言 0x01 间接(indirection) 0x02 面向对象编程中使用间接 面向过程编程 面向对象编程 0x03 OC ...

  5. 《Java程序设计》第三章-基础语法

    20145221<Java程序设计>第三章-基础语法 总结 教材学习内容总结 类型.变量与运算符 类型 Java可区分为基本类型(Primitive Type)和类类型(Class Typ ...

  6. “全栈2019”Java第一百零三章:匿名内部类详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  7. javascript进阶教程第三章--匿名和闭包--案例实战

    javascript进阶教程第三章--匿名和闭包--案例实战 一.学习任务 通过几个小练习回顾学过的知识点 二.实例 练习1: 实例描述:打开页面后规定时间内弹出一个新窗口,新窗口指定时间后自动关闭. ...

  8. 脚本语言丨Batch入门教程第三章:逻辑判断

    通过学习Batch入门教程的前两章内容,我们已经大致掌握了基本概念和认识变量的相关内容,今天我们要跟大家继续分享第三章内容:Batch入门教程之逻辑判断.  前期回顾  ◀Batch入门教程丨部署与H ...

  9. 《深入理解java虚拟机》第三章 垃圾收集器与内存分配策略

    第三章 垃圾收集器与内存分配策略 3.1 概述 哪些内存需要回收 何时回收 如何回收 程序计数器.虚拟机栈.本地方法栈3个区域随线程而生灭. java堆和方法区的内存需要回收.   3.2 对象已死吗 ...

随机推荐

  1. MySQL中concat函数(连接字符串)

    MySQL中concat函数使用方法:CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意:如果所有参数均为非二进制字符串 ...

  2. sql group by 理解

    order by是对字段进行排序,group by 是对字段进行分类,在select 语句中可以使用group by 子句将行划分成较小的组,然后,使用组函数返回每一个组的汇总信息,另外,可以使用ha ...

  3. linux下svn命令使用大全

    最近经常使用svn进行代码管理,这些命令老是记不住,得经常上网查,终于找了一个linux下svn命令使用大全:1.将文件checkout到本地目录 svn checkout path(path是服务器 ...

  4. Android手机如何通过USB共享网络给Mac?

    最近网络挂了,mac不能上网查资料,心情非常毛躁,急切寻求用mac蹭WiFi的方法. 没有找到电脑端破解WiFi密码的软件,手头的Android手机没有root,也无法查看WiFi密码--->破 ...

  5. Android学习笔记(四)——再探Intent

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 我们可以使用 Intent 来启动一个活动, 还可以在启动活动的时候传递数据的,下面一起来看一下: 一.向下一 ...

  6. [codevs1154][COJ0177][NOIP2006]能量项链

    [codevs1154][COJ0177][NOIP2006]能量项链 试题描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这 ...

  7. [RouterOS] ROS对接碧海威或PA等流控实现完美流控详细教程(附脚本全免费)

    前言: 经常在群里看到不少朋友争论海蜘蛛 ROS 维盟 爱快 碧海威 流控大师 Woyos等等软路由,哪个好.实际上,网络产品是复杂的,现在的软路由功能上已经远远不是单独的路由了.每种产品都有他本身的 ...

  8. SQL 数据库初学笔记一

    做web刚好用得上SQL和php,图书馆借来书,来一个一晚上速成 <SQL必知必会>笔记 通用的语法,相关分类执行程序(DBMS): Apache Open Office Base Ado ...

  9. BZOJ 4579: [Usaco2016 Open]Closing the Farm

    Description 依次删去一个点和它的边,问当前图是否连通. Sol 并查集. 倒着做就可以了. 每次将一个点及其的边加入,如果当前集合个数大于 1,那么就不连通. Code /******** ...

  10. NOI2005 聪聪和可可

    Sol 记忆化搜索. \(f[u][v]\) 表示聪聪在 \(u\) ,可可在 \(v\) ,聪聪抓到可可的期望. 预处理出 \(u\) 到 \(v\) 最短路径编号最小的点,记为 \(g[u][v] ...