一、Ajax技术简介
Ajax(Asynchronous JavaScript and XML,异步JavaScript和XML),Ajax 不是新的编程语言,而是一种使用现有标准的新方法。
Ajax 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。Ajax 不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。
Ajax本身是一门综合性的技术,其主要应用包含了HTML、JavaScript、XML、DOM、XMLHttpRequest等页面技术,但是在这之中最重要的就是XMLHttpRequest对象。
Ajax技术并不只依赖于Java
Ajax技术并不是只能在Java中使用,现在的各个动态Web实现技术,如PHP、ASP.NET都已经很好的支持了Ajax技术。
二、XMLHttpRequest对象
在Ajax中主要是通过XMLHttpRequest
对象处理发送异步请求和回应的,所有现代浏览器(IE7+、Firefox、Chrome、Safari 以及 Opera)均支持 XMLHttpRequest
对象(IE5 和 IE6 使用 ActiveXObject)。如果要创建一个XMLHttpRequest
对象则必须使用JavaScript。
为了应对所有的现代浏览器,包括 IE5 和 IE6,请检查浏览器是否支持 XMLHttpRequest
对象。如果支持,则创建 XMLHttpRequest 对象。如果不支持,则创建 ActiveXObject :
<script>
var xmlHttp;
function createXMLHttp() {
if(window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
} else {
// IE 内核的浏览器
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}
</script>
XMLHttpRequest对象中定义了的属性:
readState一共有5中取值:
- 0:请求没有发出(在调用open()函数之前)。
- 1:请求已经建立但还没有发出(在调用send()函数之前)。
- 2:请求已经发出正在处理之中(这里通常可以从响应得到内容头部)。
- 3:请求已经处理,正在接受服务器的信息,响应中通常有部分数据可用,但是服务器还没有完成响应。
- 4:响应已经完成,可以访问服务器响应并使用它。
XMLHttpRequest对象中的方法:
XMLHttpRequest对象的open()和send()方法在回调函数中出现比较多,一般都会用open()方法设置一个提交的路径,并通过地址重写的方式设置一些请求的参数,而真正的发出请求操作可以通过send()方法完成。
如果是POST方法则需要在send()内传入数据
GET 还是 POST?
与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用。
然而,在以下情况中,请使用 POST 请求:
- 无法使用缓存文件(更新服务器上的文件或数据库)
- 向服务器发送大量数据(POST 没有数据量限制)
- 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠
三、第一个Ajax程序
请求一个静态页面
<!DOCTYPE HTML>
<html>
<head>
<title>JSP page</title>
<script>
var xmlHttp;
function createXMLHttp() {
if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
} else {
// IE 内核的浏览器
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}
function showMsg() {
createXMLHttp();
xmlHttp.open("POST", "content.htm");
xmlHttp.onreadystatechange = showMsgCallback;
xmlHttp.send(null);
}
function showMsgCallback() {
if (xmlHttp.readyState == 4) { // 数据返回完毕
if (xmlHttp.status == 200) { // HTTP操作正常
//接收返回的内容
var text = xmlHttp.responseText;
//设置使用的CSS样式表
//document.getElementById("msg").className = "样式表名称";
document.getElementById("msg").innerHTML = text;
}
}
}
</script>
</head>
<body>
<input type="button" onclick="showMsg()" value="调用Ajax显示内容">
<span id="msg"></span>
</body>
</html>
如需获得来自服务器的响应,请使用XMLHttpRequest
对象的 responseText
或 responseXML
属性。
onreadystatechange 事件
当请求被发送到服务器时,我们需要执行一些基于响应的任务。
每当 readyState 改变时,就会触发 onreadystatechange 事件。
readyState 属性存有 XMLHttpRequest 的状态信息。
下面是 XMLHttpRequest 对象的三个重要的属性:
在 onreadystatechange 事件中,我们规定当服务器响应已做好被处理的准备时所执行的任务。
当 readyState 等于 4 且状态为 200 时,表示响应已就绪:
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
注意: onreadystatechange 事件被触发 5 次(0 - 4),对应着 readyState 的每个变化。
网友评论