AJAX = Asynchronous JavaScript and XML(异步的javaScript和XML)
它是一种使用现有标准的新方法
与服务器交换数据并更新部分网页的艺术,在不重新加载整个页的情况下。
一个简单的DEMO
<html>
<body>
<div id="div1"><h2>change this text</h2></div>
<button type="button1" onclick="loadXMLDoc()">Change Content</button>
</body>
</html>
<head>
<script type="text/javascript">
function loadXMLDoc()
{
.... AJAX script goes here ...
}
</script>
</head>
XMLHttpRequest是AJAX的基础
所有现代浏览器均支持XMLHttpRequest对象(IE7+、Firefox、Chrome、Safari 以及 Opera,IE5和IE6使用ActiveXObject)
XMLHttpRequest用于在后台与服务器交换数据。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
创建XMLHttpRequest对象的语法:
variable=new XMLHttpRequest();
IE5和IE6时创建语法:
variable=new ActiveXObject("Microsoft.XMLHTTP");
为了应对所有的现代浏览器的创建语法:
var xmlhttp; if (window.XMLHttpRequest) {// code for IE7+,Firefox,Chrome,Opera,Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6,IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); }
向服务器发送请求
xmlhttp.open("GET","test1.txt",true); xmlhttp.send();
open(method,url,async)
method:请求的类型;GET或POST
url:文件在服务器上的位置
async:true(异步)或false(同步)
send(string) 将请求发送到服务器
string:仅用于POST请求
GET更简单也更快,并具在大部分情况下都能用。
POST的使用条件:
2 向服务器发送大量数据(POST没有数据量限制)
3 发送包含量未知字符的用户输入时,POST比GET列稳定也更可靠
如果需要像HTML表单那样POST数据,请使用setRequestHeader()来添加HTTP头。然后在send()方法中规定您希望发送的数据:
xmlhttp.open("POST","ajax_test.asp",true); xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); xmlhttp.send("fname=Bill&lname=Gates");
setRequestHeader(header,value)
header:规定的名称
value:规定头的值
Async = true
在响应处于onreadystatechange事件中的就绪状态时执行的函数
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET",true);
xmlhttp.send();
Async = false
xmlhttp.open("GET",false);
xmlhttp.send();
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
获得来自服务器的响应,使用XMLHttpRequest对象的responseText或responseXML属性。
responseText:返回字符串形式的响应
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
responseXML:
xmlDoc=xmlhttp.responseXML;
txt="";
x=xmlDoc.getElementsByTagName("ARTIST");
for (i=0;i<x.length;i++)
{
txt=txt + x[i].childNodes[0].nodeValue + "<br />";
}
document.getElementById("myDiv").innerHTML=txt;
onreadystatechange事件
onreadystatechange 存储函数(或函数名),每当readyState属性改变时,就会调用该函数。
readyState 存有XMLHttpRequest的状态。从0到4发生变化。
0:请求未初始化
1:服务器连接已建立
2:请求已接收
3:请求处理中
4:请求已完成,且响应已就绪
status 200:“OK”
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
注释:onreadystatechange事件被触发5次(0-4),对应着readystate的每个变化
callback函数是一种以参数形式传递给另一个函数的函数。
AJAX可用来与数据库进行动态通信。
AJAX基于下列核心技术:
XHTML、CSS、DOM、JavaScript、XML、XMLHttpRequest
Ajax的工作原理相当于在用户和服务器之间加了一个中间层-AJAX引擎,使用户操作与服务器响应异步化。并不是所有的用户请求都提交给服务器,像一些数据验证和简单的数据处理等都交给AJAX引擎自己来做,只有确定需要从服务器读取新数据时再由AJAX引擎代为向服务器提交请求。
Ajax框架分类
客户端框架和服务器端框架
基于客户端浏览器的应用框架一般分为两种:
1、Application Frameworks:
2、Infrastructural Frameworks:
基于服务器端的应用框架通常以下面两种方式工作:
1、HTML/JS Generation
2、远程交互