- Ajax被认为是(Asynchronous JavaScript and XML的缩写)。现在,允许浏览器与服务器通信而无须刷新当前页面的技术都被叫做Ajax.
- 通过 AJAX,JavaScript 无需等待服务器的响应,而是:
在等待服务器响应时执行其他脚本
当响应就绪后对响应进行处理
●不用刷新整个页面便可与服务器通讯的办法:
-Flash
-Java applet
-框架:如果使用一组框架构造了一个网页,可以只更新其中一个框架,而不必惊动整个页面
-隐藏的iframe
-XMLHttpRequest;该对象是对JavaScript的一个扩展,可使网页与服务器进行通信。是创建Ajax应用的最佳选择。实际上通常把Ajax当成XMLHttpRequest对象的代名词
●AJAX不是完美的技术。使用AJAX, 它的一些缺陷不得不权衡一下:
-由Javascript和AJAX引擎导致的浏览器的兼容
-页面局部刷新,导致后退等功能失效。
-对流媒体的支持没有FLASH、Java Applet好。
-手持设备(如手机、PDA等)支持性差。
●XMLHttpRequest最早是在IE5中以ActiveX组件的形式实现的。非W3C标准.
●创建XMLHttpRequest对象(由于非标准所以实现方法不统一)
-Internet Explorer把XMLHttpRequest实现为一个ActiveX对象
-其他浏览器(Firefox、 Safari、 Opera…). 把它实现为一个本地的JavaScript对象。
-XMLHttpRequest在不同浏览器上的实现是兼容的,所以可以用同样的方式访问XMLHttpRequest实例的属性和方法,而不论这个实例创建的方法是什么。
AJAX - 创建 XMLHttpRequest 对象
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");
}
●
说明:对window. XMHt tpRequest的调用会返回个对象 或null, if语句会把调用返回的结果看作是true或false (如果返回对象则为true,返回null则为false)。如果XMLHt tpRequest对象存在,则把xhr的值设为该对象的新实例。如果不存在,就去检测Activeobject 的实例是否存在,如果答案是肯定的,则把微软XMLHTTP 的新实例赋给xhr
方法 | 描述 |
---|---|
abort () | 停止当前请求 |
getAllResponseHeaders() | 把HTTP请求的所有响应首部作为键/值对返回 |
getResponselHeader(“header”) | 返回指定首部的串值 |
open (“method”, “url”) | 建立对服务器的调用。Hethod参数可以是GET,POST或PUT. url参数可以是相对URL或绝对URL. |
send(content) | 向服务器发送请求 |
setRequestHeader(“header”,“value”) | 把指定首部设置为所提供的值。在设置任何首部之前必须先调用open() |
open(method,url,async):规定请求的类型、URL 以及是否异步处理请求。
method:请求的类型;GET 或 POST
url:文件在服务器上的位置
async:true(异步)或 false(同步)
AJAX 指的是异步 JavaScript 和 XML(Asynchronous JavaScript and XML)。XMLHttpRequest 对象如果要用于 AJAX 的话,其 open() 方法的 async 参数必须设置为 true:
send(string):将请求发送到服务器。
string:仅用于 POST 请求
GET 还是 POST?
与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用。然而,在以下情况中,请使用 POST 请求:
无法使用缓存文件(更新服务器上的文件或数据库)
向服务器发送大量数据(POST 没有数据量限制)
发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠
//简单的 GET 请求:
xmlhttp.open("GET","demo_get.asp",true);
xmlhttp.send();
//在上面的例子中,您可能得到的是缓存的结果。
//为了避免这种情况,请向 URL 添加一个唯一的 ID:
xmlhttp.open("GET","demo_get.asp?t=" + Math.random(),true);
xmlhttp.send();
//通过 GET 方法发送信息,请向 URL 添加信息:
xmlhttp.open("GET","demo_get2.asp?fname=Bill&lname=Gates",true);
xmlhttp.send();
//简单 POST 请求:
xmlhttp.open("POST","demo_post.asp",true);
xmlhttp.send();
如果需要像 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):请求添加 HTTP 头。
header: 规定头的名称
value: 规定头的值
属性 | 描述 |
---|---|
responseText | 获得字符串形式的响应数据。服务器的响应,表示为一个串。 |
responseXML | 获得 XML 形式的响应数据。服务器的响应,表示为X0IL. 这个对象可以解析为DM对象。 |
onreadystatechange | 每个状态改变(readyState属性改变)是都会触发这个事件处理器,通常会调用一个javaScript函数 |
readyState | 请求的状态,有5个可取值: 0=请求未初始化、1=服务器链接已建立,正在加载、2=请求已接收,已经加载、3=请求处理中,交互中、4=请求已完成,且响应已就绪 |
status | 服务器的HTTP状态码(200对应OK、404对 应NotFount.等) |
statusText | HTTP状态码的相应文本(OK或NotPount等) |