码迷,mamicode.com
首页 > Web开发 > 详细

Ajax

时间:2015-06-16 18:36:36      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

一.XMLHttpRequest
Ajax 技术核心是XMLHttpRequest 对象(简称XHR),这是由微软首先引入的一个特性,其他浏览器提供商后来都提供了相同的实现。在XHR 出现之前,Ajax 式的通信必须借助一
些hack 手段来实现,大多数是使用隐藏的框架或内嵌框架。XHR 的出现,提供了向服务器发送请求和解析服务器响应提供了流畅的接口。能够以异步方式从服务器获取更多的信息,这就意味着,用户只要触发某一事件,在不刷新网页的情况下,更新服务器最新的数据。虽然Ajax 中的x 代表的是XML,但Ajax 通信和数据格式无关,也就是说这种技术不一定使用XML。

function createXHR() {

var xmlhttp=null;
    if(window.ActiveXObject){
//        IE的情况
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }else{
//           非IE的情况
        xmlhttp=new XMLHttpRequest();
    }

return xmlhttp

}

var xhr = new createXHR();

在使用XHR 对象时,先必须调用open()方法,它接受三个参数:要发送的请求类型(get、post)、请求的URL 和表示是否异步。

xhr.open(‘get‘, url, false);

open()方法并不会真正发送请求,而只是启动一个请求以备发送。通过send()方法进行发送请求,send()方法接受一个参数,作为请求主体发送的数据。如果不需要则,必须填null。执行send()方法之后,请求就会发送到服务器上。

xhr.send(null);

当请求发送到服务器端,收到响应后,响应的数据会自动填充XHR 对象的属性。那么一共有四个属性:

1、属性名说明:responseText 作为响应主体被返回的文本
2、responseXML:如果响应主体内容类型是"text/xml"或"application/xml",则返回包含响应数据的XML DOM 文档
3、status:响应的HTTP 状态
4、statusText:HTTP 状态的说明

接受响应之后,第一步检查status 属性,以确定响应已经成功返回。一般而已HTTP 状态代码为200 作为成功的标志。除了成功的状态代码,还有一些别的:
1、200 OK 服务器成功返回了页面
2、400 Bad Request 语法错误导致服务器不识别
3、401 Unauthorized 请求需要用户认证
4、404 Not found 指定的URL 在服务器上找不到
5、500 Internal Server Error 服务器遇到意外错误,无法完成请求
6、503 ServiceUnavailable 由于服务器过载或维护导致无法完成请求

addEvent(document, ‘click‘, function () {
var xhr = new createXHR();
xhr.open(‘get‘, ‘demo.php?rand=‘ + Math.random(), false); //设置了同步
xhr.send(null);
if (xhr.status == 200) { //如果返回成功了
alert(xhr.responseText); //调出服务器返回的数据
} else {
alert(‘数据返回失败!状态代码:‘ + xhr.status + ‘状态信息:‘ + xhr.statusText);
}
});

 

使用异步调用的时候,需要触发readystatechange 事件,然后检测readyState 属性即可。这个属性有五个值:

1、0 未初始化尚未调用open()方法
2、1 启动已经调用open()方法,但尚未调用send()方法
3、2 发送已经调用send()方法,但尚未接受响应
4、3 接受已经接受到部分响应数据
5、4 完成已经接受到全部响应数据,而且可以使用

二.GET与 POST
在提供服务器请求的过程中,有两种方式,分别是:GET 和POST。在Ajax 使用的过
程中,GET 的使用频率要比POST 高。

三、封装Ajax

function ajax(obj) {
var xhr = new createXHR();
obj.url = obj.url + ‘?rand=‘ + Math.random();
obj.data = params(obj.data);
if (obj.method === ‘get‘) obj.url = obj.url.indexOf(‘?‘) == -1 ?
obj.url + ‘?‘ + obj.data : obj.url + ‘&‘ + obj.data;
if (obj.async === true) {
xhr.onreadystatechange = function () {

if (xhr.readyState == 4) callback();
};
}
xhr.open(obj.method, obj.url, obj.async);
if (obj.method === ‘post‘) {
xhr.setRequestHeader(‘Content-Type‘, ‘application/x-www-form-urlencoded‘);
xhr.send(obj.data);
} else {
xhr.send(null);
}
if (obj.async === false) {
callback();
}

function callback () {
if (xhr.status == 200) {
obj.success(xhr.responseText); //回调
} else {
alert(‘数据返回失败!状态代码:‘ + xhr.status + ‘,
状态信息:‘ + xhr.statusText);
}
}
}

 

Ajax

标签:

原文地址:http://www.cnblogs.com/huangyy/p/4581384.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!