一、 简介
异步JavaScript+XML(即Ajax),是一种创建交互式web应用程序的Web开发技术。这种程序使用JavaScript和XML从客户端提交服务器请求,且整个过程中仅需要交换少量的数据而不必提交整个web页面。因此,这样的程序将更快和更具响应性,并将成为新一代客户机-服务器系统的重要基础技术之一。你可以在站点http://www.google.com/webhp?complete=1&hl=en处看到一种良好的AJAX实践技术展示。在此页面中,如果你把任何字母输入到文本框内,那么随后就会出现一个下拉列表框,其中的内容直接来自于服务器而不必提交整个页面。AJAX的核心是XMLHttpRequest对象。客户端能够在后台检索并直接提交XML数据。为了把检索的XML数据转换成可生成的HTML内容,需要依赖于客户端文档对象模型(DOM)读取XML文档结点树并且组成用户看得见的HTML元素。其实,AJAX并非象HTML,DHTML等一样的单一技术,它结合了不同的技术:
·XMLHttpRequest对象被使用于与web服务器异步地交换数据。
·XML被普遍用作把数据传输回服务器的格式(尽管任何格式都能使用,例如普通文本,HTML等)。
·如果使用XML作为转换格式,那么DOM通常与如JavaScript这样的客户端脚本语言一起使用来动态地显示和描述交互信息。
·XHTML(或HTML),CSS用于标记和信息格式化。
二、 XMLHttpRequest对象
从历史来看,是微软首先在其Internet Explorer 5 for Windows中以一个ActiveX对象形式实现了XMLHttpRequest对象。随后,由Mozilla工程的工程师实现了Mozilla 1.0(和Netscape 7)的一种兼容的本机版本;而稍后,苹果公司在其Safari 1.2上也实现了相同的工作。其实,在W3C标准的文档对象模型(DOM)Level 3加载与存储规范中,也提到了类似的功能。现在,它成为一种事实上的标准,并开始在以后发行的大多数浏览器中得到实现。
(一) 创建对象
XMLHttpRequest对象的创建方式因浏览器不同而有所不同。对于Safari和Mozilla来说,其创建方式如下所示:
var req = new XMLHttpRequest(); |
var req = new ActiveXObject("Microsoft.XMLHTTP"); |
方法 | 描述 |
abort() | 取消当前的请求。如果你在一个不处理请求(readyState 0或4)的对象上调用它,"神秘的事情"发生了。 |
getResponseHeader("headerLabel") | 返回单个头标签的字符串值 |
getAllResponseHeaders() | 以一个串形式返回完整的头(标签和值)集合 |
open("method","URL"[,asyncFlag[, "userName"[,"password"]]]) | 指派目标URL、方法及一个悬挂请求的其它可选属性 |
send(content) | 传输请求。(可选择地)其中可以加入可寄送的字符串或DOM对象数据 |
setRequestHeader("label","value") | 把一个标签/值对指派给要发送的请求中的头部 |
var req; ……………………… req = new ActiveXObject("Microsoft.XMLHTTP"); …………… var url="AjaxServer.aspx?PubID="+ID; …………… //打开一个到URL的GET请求 req.open("GET",url,true); //实际发送一个空请求 req.send(null); |
[ //实际发送一个空请求 req.send(null); ] |
属性 | 描述 |
onreadystatechange | 每当状态改变时激发的事件的事件处理器。其中,readyState对象状态整数含义如下:0=uninitialized1=loading2=loaded3=interactive4=complete |
responseText | 经服务器处理后返回的数据的字符串版本 |
responseXML | 经服务器处理后返回的DOM兼容的数据文档对象 |
status | 由服务器返回的数字代码,例如404代表"Not Found",200代表"OK" |
statusText | 伴随着状态代码的字符串信息 |
//这是事件处理器机制;在本例中,"RequestProcessor"即是事件处理器。 req.onreadystatechange=RequestProcessor; |
function RequestProcessor() { //如果readyState处理"Ready"状态 if(req.readyState == 4) { //返回的状态代码200意味着一切顺利 if(req.status == 200) { //如果responseText不空 //req.responseText实际上是一个由AJAXServer.aspx的"Response.Write("" + sbXML.ToString() + "");"方法编写的字符串 if(req.responseText != "") { populateList(req.responseXML); } else { clearSelect(publishedBooks); } } } return true; } |
var req = new ActiveXObject("Microsoft.XMLHTTP"); |
function callInProgress(xmlhttp) { switch ( xmlhttp.readyState ) { case 1,2,3: return true; break; //Case 4和0 default: return false; break; } } |
if ( !callInProgress(xmlhttp) ) { xmlhttp.send(null); } else { alert("I'm busy. Wait a moment"); } |
<APPSETTINGS> <ADD value="data source=cal-slcu2-196;Database=pubs;User=sa;PWD=sa" key="CONN_STRING" /> </APPSETTINGS> |
按字母顺序浏览:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
→我们致力于为广大网民解决所遇到的各种电脑技术问题 如果您认为本词条还有待完善,请 编辑词条
上一篇什么是进程和线程
下一篇防止网站被采集的办法