1、XMLHttpRequest 对象
这是一个javascript对象。这是处理所有服务器通信的对象 。
创建对象的过程很简单:
<script language="javascript" type="text/javascript">
var xmlHttp=new XMLHttpRequest();
</script>
Ajax技术基本上就是把javascript技术和XMLHttpRequest对象放在Web表单和服务器之间。当用户填写表单时,数据发送给一些 JavaScript 代码而不是 直接发送给服务器。相反,JavaScript 代码捕获表单数据并向服务器发送请求。更好的是,请求是异步发送的,就是说 JavaScript 代码(和用户)不用等待服务器的响应。因此用户可以继续输入数据、滚动屏幕和使用应用程序。然后,服务器将数据返回 JavaScript 代码(仍然在 Web 表单中),后者决定如何处理这些数据。它可以迅速更新表单数据,让人感觉应用程序是立即完成的,表单没有提交或刷新而用户得到了新数据。JavaScript 代码甚至可以对收到的数据执行某种计算,再发送另一个请求,完全不需要用户干预!它可以根据需要自行与服务器进行交互,用户甚至可以完全不知道幕后发生的一切。
2、加入 一些javascript
·获取表单数据:JavaScript 代码很容易从 HTML 表单中抽取数据并发送到服务器。
·修改表单上的数据:更新表单也很简单,从设置字段值到迅速替换图像。
·解析 HTML 和 XML:使用 JavaScript 代码操纵 DOM(请参阅 下一节),处理 HTML 表单服务器返回的 XML 数据的结构。
对于前两点,需要非常熟悉 getElementById() 方法,
//get element
var phone = document.getElementById("phone").value;
//set element
document.getElementById("order").value = response[0];
3、以 DOM 结束
最后还有 DOM,即文档对象模型。
1、获取 Request 对象
XMLHttpRequest 是 Ajax 应用程序的核心,由于浏览器之争,XMLHttpRequest成了牺牲品之一。因此在不同浏览器上获得 XMLHttpRequest 对象可能需要采用不同的方法。
Microsoft 浏览器 Internet Explorer 使用 MSXML 解析器处理 XML,如果编写的 Ajax 应用程序要和 Internet Explorer 打交道,那么必须用一种特殊的方式创建对象。根据 Internet Explorer 中安装的 JavaScript 技术版本不同,MSXML 实际上有两种不同的版本,因此必须对这两种情况分别编写代码。
清单 3. 在 Microsoft 浏览器上创建 XMLHttpRequest 对象
var xmlHttp = false;
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) {
xmlHttp = false;
}
}
处理 Mozilla 和非 Microsoft 浏览器
清单 1 所示的一行简单代码:
var xmlHttp = new XMLHttpRequest();
结合起来支持不同浏览器
清单 4. 以支持多种浏览器的方式创建 XMLHttpRequest 对象
/* Create a new XMLHttpRequest object to talk to the Web server */
var xmlHttp = false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) {
xmlHttp = false;
}
}
@end @*/
if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
xmlHttp = new XMLHttpRequest();
}
清单5:
Pub.newXMLHttpRequest=function newXMLHttpRequest() {
var xmlreq = false;
if (window.XMLHttpRequest) {
xmlreq = new XMLHttpRequest();
} else if (window.ActiveXObject) {
try {
xmlreq = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e1) {
try {
xmlreq = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) {
alert(e2);
}
}
}
return xmlreq;
}
2、Ajax的请求/响应
发出请求
您已经有了一个崭新的 XMLHttpRequest 对象,现在让它干点活儿吧。首先需要一个 Web 页面能够调用的 JavaScript 方法(比如当用户输入文本或者从菜单中选择一项时)。接下来就是在所有 Ajax 应用程序中基本都雷同的流程:
1、从 Web 表单中获取需要的数据。
2、建立要连接的 URL。
3、打开到服务器的连接。
4、设置服务器在完成后要运行的函数。
5、发送请求。
清单 5. 发出 Ajax 请求
function callServer() {
// 从表单中获取数据
var city = document.getElementById("city").value;
var state = document.getElementById("state").value;
// 判断是否输入请求数据
if ((city == null) || (city == "")) return;
if ((state == null) || (state == "")) return;
// 建立要连接的URL
var url = "/scripts/getZipCode.php?city=" + escape(city) + "&state=" + escape(state);
// 打开到服务器的连接
xmlHttp.open("GET", url, true);
// 设置服务器运行完成后要运行的函数
xmlHttp.onreadystatechange = updatePage;
// 发送请求
xmlHttp.send(null);
}
xmlHttp.open("GET", url, true);最后一个参数如果设为 true,那么将请求一个异步连接(这就是 Ajax 的由来)
xmlHttp(要记住,这是 XMLHttpRequest 对象实例)的 onreadystatechange 属性可以告诉服务器在运行完成 后(可能要用五分钟或者五个小时)做什么。因为代码没有等待服务器,必须让服务器知道怎么做以便您能作出响应。在这个示例中,如果服务器处理完了请求,一个特殊的名为 updatePage() 的方法将被触发。
3、处理响应
现在只要知道两点:
·什么也不要做,直到 xmlHttp.readyState 属性的值等于 4。
·服务器将把响应填充到 xmlHttp.responseText 属性中。
清单 6. 处理服务器响应
function updatePage() {
if (xmlHttp.readyState == 4) {
var response = xmlHttp.responseText;
document.getElementById("zipCode").value = response;
}
}
4、XMLHttpRequest方法和属性
·open():建立到服务器的新请求。
·send():向服务器发送请求。
·abort():退出当前请求。
·readyState:提供当前 HTML 的就绪状态。
·responseText:服务器返回的请求响应文本。