解锁网页动态交互:AJAX技术全解析(中)

Ajax编程步骤

为了方便理解,我给AJAX统一了一个流程,要想实现AJAX,就要按照以后步骤走:

创建XMLHttpRequest对象

设置请求方式

调用回调函数

发送请求

下面来看下具体步骤:

2.1 创建XMLHttpRequest对象

创建XMLHttp对象的语法是:

var xmlHttp=new XMLHttpRequest();

如果是IE5或者IE6浏览器,则使用ActiveX对象,创建方法是:

var xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");

一般我们手写AJAX的时候,首先要判断该浏览器是否支持XMLHttpRequest对象,如果支持则创建该对象,如果不支持则创建ActiveX对象。JS代码如下:

//第一步:创建XMLHttpRequest对象

var xmlHttp;

if (window.XMLHttpRequest) {

//IE

xmlHttp = new XMLHttpRequest();
} else if (window.ActiveXObject) {

//IE

xmlHttp = new ActiveXObject("Microsoft.XMLHTTP")

}

2.2 设置请求方式

WEB开发中,请求有两种形式,一个是get,一个是post,所以在这里需要设置一下具体使用哪个请 求,XMLHttpRequest对象的open()方法就是来设置请求方式的。 open()方法

功能

参数

规定请求的类 型、URL 以及是 否异步处理请求

参数1:设置请求类型(GET POST),GETPOST的区别请自己百度一 下,这里不做解释; 参数2:文件在服务器上的位置; 参数3:是否异步处理 请求,是为true,否为false

如下:

//第二步:设置和服务器端交互的相应参数,向路径http://localhost:8080/JsLearning3/getAjax 准备发送数据

var url = "http://localhost:8080/JsLearning3/getAjax";

xmlHttp.open("POST", url, true);

open方法如下

GET 还是 POST POST 相比,GET 更简单也更快,并且在大部分情况下都能用。然而,在以下情况 中,请使用 POST 请求:

无法使用缓存文件(更新服务器上的文件或数据库) 向服务器发送大量数据(POST 没有数据量 限制) 发送包含未知字符的用户输入时,POST GET 更稳定也更可靠

异步 - True False AJAX 指的是异步 JavaScript XMLAsynchronous JavaScript and XML)。 XMLHttpRequest 对象如果要用于 AJAX 的话,其 open() 方法的 async 参数必须设置为 true:对于 web 开发人员来说,发送异步请求是一个巨大的进步。很多在服务器执行的任务都相当费时。AJAX 出现 之前,这可能会引起应用程序挂起或停止。 通过 AJAXJavaScript 无需等待服务器的响应,而是: 等待服务器响应时执行其他脚本 当响应就绪后对响应进行处理

2.3 调用回调函数

如果在上一步中open方法的第三个参数选择的是true,那么当前就是异步请求,这个时候需要写一个回 调函数,XMLHttpRequest对象有一个onreadystatechange属性,这个属性返回的是一个匿名的方法, 所以回调函数就在这里写xmlHttp.onreadystatechange=function{},function{}内部就是回调函数的内
容。所谓回调函数,就是请求在后台处理完,再返回到前台所实现的功能。在这个例子里,我们的回调 函数要实现的功能就是接收后台处理后反馈给前台的数据,然后将这个数据显示到指定的div上。因为从 后台返回的数据可能是错误的,所以在回调函数中首先要判断后台返回的信息是否正确,如果正确才可 以继续执行。代码如下:

//第三步:注册回调函数

xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState == 4) {

if (xmlHttp.status == 200) {

var obj = document.getElementById(id);

obj.innerHTML = xmlHttp.responseText;
} else {

alert("AJAX服务器返回错误!");
}

}
}

在上面代码中,xmlHttp.readyState是存有XMLHttpRequest 的状态。从 0 4 发生变化。0: 请求未初 始化。1: 服务器连接已建立。2: 请求已接收。3: 请求处理中。4: 请求已完成,且响应已就绪。所以这里 我们判断只有当xmlHttp.readyState4的时候才可以继续执行。

xmlHttp.status是服务器返回的结果,其中200代表正确。404代表未找到页面,所以这里我们判断只有 xmlHttp.status等于200的时候才可以继续执行。

var obj = document.getElementById(id);obj.innerHTML = xmlHttp.responseText;

这段代码就是回调函数的核心内容,就是获取后台返回的数据,然后将这个数据赋值给idtestid divxmlHttp对象有两个属性都可以获取后台返回的数据,分别是:responseTextresponseXML 其中responseText是用来获得字符串形式的响应数据,responseXML是用来获得 XML 形式的响应数
据。至于选择哪一个是取决于后台给返回的数据的,这个例子里我们只是显示一条字符串数据所以选择
的是responseTextresponseXML将会在以后的例子中介绍。

AJAX状态值与状态码区别 AJAX状态值是指,运行AJAX所经历过的几种状态,无论访问是否成功都将响 应的步骤,可以理解成为AJAX运行步骤。如:正在发送,正在响应等,由AJAX对象与服务器交互时所
得;使用“ajax.readyState”获得。(由数字1~4单位数字组成) AJAX状态码是指,无论AJAX访问是否成 功,由HTTP协议根据所提交的信息,服务器所返回的HTTP头信息代码,该信息使用“ajax.status”所获
得;(由数字1XX,2XX三位数字组成,详细查看RFC 这就是我们在使用AJAX时为什么采用下面的方式 判断所获得的信息是否正确的原因。

if(ajax.readyState == 4 && ajax.status == 200) {。。。。);}

AJAX运行步骤与状态值说明 AJAX实际运行当中,对于访问XMLHttpRequestXHR)时并不是一次完 成的,而是分别经历了多种状态后取得的结果,对于这种状态在AJAX中共有5种,分别是: 0 - (未初始 )还没有调用send()方法 1 - (载入)已调用send()方法,正在发送请求 2 - (载入完成)send()方法执行完 成, 3 - (交互)正在解析响应内容 4 - (完成)响应内容解析完成,可以在客户端调用了 对于上面的状态, 其中“0”状态是在定义后自动具有的状态值,而对于成功访问的状态(得到信息)我们大多数采用“4”进行 判断。

AJAX状态码说明 1:请求收到,继续处理 2:操作成功收到,分析、接受 3:完成此请求必须进一步处 4:请求包含一个错误语法或不能完成 5:服务器执行一个完全有效请求失败

故障码就看百度吧(这一块东西太多)(AJAX 状态值(readyState)与状态码(status)详解 - 惊觉小菜鸟 - 博客园 (cnblogs.com)

2.4 发送请求

//第四步:设置发送请求的内容和发送报送。然后发送请求

var uname= document.getElementsByName("userName")[0].value;

var upass= document.getElementsByName("userPass")[0].value ;

var params = "userName=" + uname+ "&userPass=" +upass+ "&time=" + Math.random();

// 增加time随机参数,防止读取缓存

xmlHttp.setRequestHeader("Content-type", "application/x-www-form- urlencoded;charset=UTF-8");

// 向请求添加 HTTP 头,POST如果有数据一定加加!!!!

xmlHttp.send(params);

如果需要像 HTML 表单那样 POST 数据,请使用 setRequestHeader() 来添加 HTTP 头。然后在 send() 方法中规定您希望发送的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值