日期:2014-05-16 浏览次数:20721 次
Ajax 是Asynchronous Javascript and XML的简写,对它最多的人是无非是局部刷新技术,它可以在不刷新页面的情况下向后台发送或者请求数据。它的核心是XMLHttpRequest对象(简称XHR),在IE7+、Firfox、Opera、Chrome、Safari都支持原生的XHR对象即显式使用var xhr = new XMLHttpRequest()就可以直接创建此对象。如果要支持IE7以下版本的,则需要使用ActiveX对象来实现。随着WindowXP的退休,相信用到IE7以下版本的几乎没有了,但还是提供以前的兼容实现方式:
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.2.0"], i, len; for (i = 0.len = version.length; i < len; i++) { try{ new ActiveXObject(version[i]); arguments.callee.activeXString = version[i]; break; } catch (ex){ //dosomething(); } }; return new ActiveXObject(arguments.callee.activeXString); } else { throw new Error("No XHR object available!"); }; }下面是你所看见AJAX最原生的js实现方式,现在jquery等框架已经完全封装,下面讲解每个步骤的作用以及使用。
var xhr = new createXHR(); xhr.onreadyStatechange = function() { if (xhr.readyState == 4) { if (xhr.status >= 200 && xhr.status < 300) { //http状态为成功 alert(xhr.responseText); } else { alert("请求没有成功!状态说明:" + xhr.statusText); } }; } xhr.open("get", "example.jsp", true);//启动一个请求以备发送 xhr.send(null); //当请求类型为GET时,参数为null;为POST时,传送的是作为请求主体的数据。responseText:作为响应主体返回的文本。
var xhr = new createXHR(); xhr.open("get", "example.jsp", false); //第三个参数为false,为同步方式 xhr.send(null); if (xhr.status >= 200 && xhr.status < 300) { //http状态为成功 alert(xhr.responseText);//处理数据 } else { alert("请求没有成功!状态说明:" + xhr.statusText); }很容易看到,只有到xhr在浏览器得到服务器方面返回的数据之后才会往下执行;
在xhr.open()之后,send()之前可以设置请求的头部信息关于头部信息,请参考HTTP协议,
例如下面将用户信息表单序列化之后发送到服务器,告诉服务器我发送的内容是表单形式。
xhr.open("post", "example.jsp", true); setRequestHead("Content-Type", "application/x-www-form-urlencoded"); var form = document.getElementById("user-info"); xhr.send(serialize(form));