Ajax = asynchronous JavaScript + XML

Ajax = asynchronous JavaScript + XML
XMLHttpRequest最早在IE5中以Activex组件形式实现。
XMLHttpRequest并不是W3C标准,许多功能涵盖在一个新的提案中,DOMLevel3加载和保存规约(load and save specification),因其不是标准,所以在不同浏览器上的表现稍有差别,Firefox、Safari、Opera、IE都以类似的方式实现了XMLHttpRequest对象的行为。
当前使用的浏览器大多支持XMLHttpRequest,不过还是应该查看Web日志,了解用户在使用什么样的客户端来访问网站。

1。创建XMLHttpRequest对象,由于XMLHtttpRequest不是一个W3C标准,可以用JavaScript使用多种方式来创建XMLHttpRequest对象。IE把XMLHttpRequest实现为一个Activex对象,其它浏览器(Firefox、Safari、Opera)把它实现为一个本地JavaScript对象,JavaScript中必须包含有关的逻辑。
如果浏览器支持ActiveX对象,就使用ActiveX来创建XMLHttpRequest对象,否则就使用本地JavaScript对象技术来创建。如下:
var objXHR;
function createXHR(){
     if(window.ActiveXObject){
          objXHR = new ActiveXObject("Microsoft.XMLHTTP");
     }
     else if(window.XMLHttpRequest){
          objXHR = new XMLHttpRequest;
     }
}

2。XMLHttpRequest对象的典型方法
abort()停止当前请求
getAllResponseHeaders() 把HTTP请求的所有响应首部做为键/值对返回
getResponseHeader("header") 返回指定首部的串值
open("method","url") 建立对服务器的调用,method可以是get、post或put
send(content) 向服务器发送请求,content做为请求体的一部分发送给目标URL,向send提供参数时要确保open中指定的方法是post。
setRequestHeader("header","value") 把指定首部设置为所提供的值,必须先调用open()

3。XMLHttpRequest对象的属性
onreadystatechange
请求的状态改变时会触发这个事件处理器
readyState
请求的状态,0=未初始化,对象已初始化,尚未调用open方法
1=已初始化,调用open方法之后。2=发送数据,调用send方法之后
3=数据传送中,已接收部分,尚未接收完成。4=数据全部接收完成
responseText
服务器的响应,表示一个串
responseXML
服务器的响应,表示为XML,这个对象可以解析为一个DOM对象
status
服务器的HTTP状态码,200对应ok,404对应NotFound
statusText
HTTP状态码的相应文本,ok或NotFound等等。

在JavaScript中所有函数在内存中都编有地址,可以使用函数名引用。可以把函数指针做为参数传递给其他函数,或者在一个对象的属性中存储函数指针。
在XMLHttpRequest对象的onreadystatechange属性中存储了回调函数的指针,当XMLHttpRequest对象的内部状态发生改变时,就会调用这个回调函数。

关于安全
XMLHttpRequest对象请求的所有资源都必须与调用脚本在同一个域内,如果XMLHttpRequest对象请求脚本所在域之外的资源,IE会显示警告,firefox则会停止请求。

innerHTML
innerHTML属性不是HTML的标准属性,大多数浏览器都支持innerHTML属性,IE在表和表行之类的HTML元素上innerHTML属性是只读属性。

用于处理XML文档的DOM元素属性
childNodes 返回当前元素所有子元素的数组
firstChild,lastChild,nextSibling,previousSibling,nodeValue,parentNode
遍历XML文档的DOM方法
getElementById(id),getElementByTagName(name),hasChildNodes(),getAttribute(name)

动态创建内容时使用的W3C DOM 属性和方法
document.createElement(tagName) 创建于tagName指定的元素
document.createTextNode(text) 创建一个包含静态文本的节点
<element>.appendChild(childNode) 将指定的节点增加到当前元素<element>的子节点列表
<element>.getAttribute(name) 获得元素中属性name的值
<element>.setAttribute(name,value) 设置元素中属性name的值
<element>.insertBefore(newNode, targetNode) 将newNode作为当前元素的子节点插入到targetNode子节点之前
<element>.removeAttribute(name) 从元素中删除属性name
<element>.removeChild(childNode) 从元素中删除子节点childNode
<element>.replace(newNode,oldNode) 将节点oldNode替换为新节点newNode
<element>.hasChildnodes() 此方法返回一个布尔值,指示元素是否有子元素

用XMLHttpReuqest对象的post方式发送请求时,为了确保服务器知道请求体中有请求参数,需要调用setRequestHeader将Content-Type值设置为application/x-www-form-urlencoded。

某些情况下,有些浏览器会把多个XMLHttpRequest请求的结果缓存在同一个url,如果对每个请求对响应不同,就会带来不好的结果,把当前时间戳加到url的最后,确保url的唯一性,从而避免浏览器缓存结果。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值