您的位置:首页 > Web前端 > JavaScript

js之AJAX

2013-10-29 16:56 148 查看
AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。
AJAX 不是新的编程语言,而是一种使用现有标准的新方法。
AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下。
AJAX的核心是JavaScript对象XmlHttpRequest。
由于ie7-XmlHttpRequest是通过ActiveXObject实现的,所以特殊处理才能兼容

function createXHR() {
if (typeof XMLHttpRequest != "undefined") {
return new XMLHttpRequest();
} else if (typeof ActiveXObject != "undefined") {
var version = ["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp"];
var i;
var len = version.length;

for (i = 0; i < len; i++) {
try {
return new ActiveXObject(version[i]);
break;
} catch(e) {
}
}
}
return new Error("此浏览器不支持Ajax");
}


1 同步请求

//1 先创建xhr对象
var xhr = createXHR();

//2 调用open方法,分别传入请求类型,url,是否异步
//由于ie的get请求会被缓存,所以需要传个随机参数,防止缓存
//请求的参数名和参数值最好使用encodeURIComponent进行编码处理
xhr.open("get", "test.ashx?_r=" + Math.random(), false);

//3 发送请求
//如果是get请求,则send方法为null,如果是post,则参数写在这里
xhr.send(null);

//通过判断xhr的状态处理,对请求回来的数据进行处理
//ie低版本会把204设置为1223,高版本会把204变成200,opera会把204设置为0,204的响应中没有body,而且Content-Length=0。
if((xhr.status >= 200 && xhr.status < 300)||xhr.status === 304 || xhr.status === 1223 || xhr.status === 0) {
//由于xhr.responseXML只有在返回xml才有效,所以一般使用xhr.responseText
alert(xhr.responseText);
}
//一般情况下xhr对象不进行重用
xhr = null;


2 异步请求

//1 先创建xhr对象
var xhr = createXHR();

//2 由于异步请求会在整个请求阶段都触发onreadystatechange,所以在这个事件里对结果进行处理
//  跟其他事件不同,onreadystatechange不会传入event对象
xhr.onreadystatechange = function () {
//这里使用xhr,而不是this,有资料说使用this会在某些浏览器上报错(但我没遇到过)
//readState为4表示请求结束
if (xhr.readyState == 4) {
if ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304 || xhr.status === 1223 || xhr.status === 0) {
alert(xhr.responseText);
}
}
};

//3 调用open方法,由于post请求不会缓存,所以不需要随机参数来防止缓存
xhr.open("post", "test.ashx", true);

//4 设置请求头部,post请求需要模拟表单提交,服务器才能得到请求过来的参数
//  这一步必须在open和send中间

xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

//5 发送请求
//请求的参数名和参数值最好使用encodeURIComponent进行编码处理
xhr.send("name=mu&age=27");


注意:
1 get请求处理的速度比post快,如果数据量不大建议优先get请求
2 xhr.abort()可以中断请求,必须放在send后面
3 xhr中的请求头信息只能设置,回复头信息只能读取
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: