XMLHttpRequest提供了HTTP协议的完全访问,包括作出POST和HEAD请求以及普通的GET请求的能力,可以同步或异步返回Web服务器的请求,并且能够以文本或者一个DOM文档的形式返回内容
使用XMLHttpRequest脚本化HTTP的三个步骤:
大 多数浏览器中,创建XMLHttpRequest的方法:var request = new XMLHttpRequest();在IE6 IE5中XMLHttpRequest是一个ActiveX对象,创建方法是:var request = new ActiveXObject("Microsoft.XMLHTTP");或var request
= new ActiveXObject("Msxml2.XMLHTTP");
XMLHttpRequest向Web服务器提交请求的过程:
使用同步的问题:
如果Web服务 器停止响应,send()函数会阻塞很长一段时间,Javascript执行停止,而且XMLHttpRequest不能停止,send()方法并没有提 供任何方式来制定等待时间的最大长度,而且,一旦请求已经发送,客户端Javascript的单线程执行模式也不允许脚本中断一个同步的 XMLHttpRequest请求
处理异步响应:
send()方法向服务器发送请求然后立即返回,响应时会产生onreadystatechange事件,正如其名,只要readyState变了,事件句柄函数就会被调用
readyState值与含义:
0 open()还没有调用
1 open()已经调用,但是send()还没有调用
2 send()已经调用,但服务器还没有响应
3 正在从服务器接收数据,readyState 3在Firefox与IE中略有不同
4 服务器响应完成
readyState 3的注意事项:
在Firefox中readyState 3多次调用onreadystatechange句柄,以提供下载反馈过程,脚本可能使用这些多次调用来为用户显示一个进度指示器,而在IE中readyState 3只调用一次
使用XMLHttpRequest脚本化HTTP的三个步骤:
- 创建一个XMLHttpRequest对象
- 指定HTTP请求并向一个Web服务器提交
- 同步或异步的获得服务器响应
大 多数浏览器中,创建XMLHttpRequest的方法:var request = new XMLHttpRequest();在IE6 IE5中XMLHttpRequest是一个ActiveX对象,创建方法是:var request = new ActiveXObject("Microsoft.XMLHTTP");或var request
= new ActiveXObject("Msxml2.XMLHTTP");
XMLHttpRequest向Web服务器提交请求的过程:
- 调 用open()方法来制定所请求的URL以及请求的HTTP方法,大多数HTTP请求都是用GET方法完成的,该方法只是下载该URL的内容,另一个方法 是POST,它允许指定的变量的值作为请求的一部分,HEAD是另一个有用的HTTP方法,它要求服务器只是返回和该URL关联的头部;open ("GET", url, false, [name], [password]), 默认情况下,open方法设置一个异步的XMLHttpRequest,将false作为第三个参数,就是告诉函数同步获取服务器响应,最后两个参数是当 从一个需要授权的服务器获取一个URL的时候需要用到的,open并不实际向Web发送请求,只是保存自己的参数,等到实际发送时再使用,在发送请求前, 必须设置所需的请求头部,例如:request.setRequestHeader("User-Agent", "XMLHttpRequest");Web浏览器自动为建立的请求添加相关的cookie,只有当想要向服务器发送一个假的cookie时,才需要显示 的设置Cookie头部
- 发送请求send(null),参数是请求提,对于HTTP GET请求,参数总是为null,然后对于POST请求,它包含要发送给服务器的表单数据
- 返 回,返回后可以根据XMLHttpRequest的status属性来检查服务器所返回的HTTP状态,状态200代表成功,responseText属 性成为了一个可用的字符串,如果响应的是一个XML文档,也可以通过responseXML属性把该文档作为一个DOM Document对象来访问,为了让XMLHttpRequest能够把相应解析到Document对象中,服务器必须使用MIME类型的 “text/xml”来表示其XML文档
使用同步的问题:
如果Web服务 器停止响应,send()函数会阻塞很长一段时间,Javascript执行停止,而且XMLHttpRequest不能停止,send()方法并没有提 供任何方式来制定等待时间的最大长度,而且,一旦请求已经发送,客户端Javascript的单线程执行模式也不允许脚本中断一个同步的 XMLHttpRequest请求
处理异步响应:
send()方法向服务器发送请求然后立即返回,响应时会产生onreadystatechange事件,正如其名,只要readyState变了,事件句柄函数就会被调用
readyState值与含义:
0 open()还没有调用
1 open()已经调用,但是send()还没有调用
2 send()已经调用,但服务器还没有响应
3 正在从服务器接收数据,readyState 3在Firefox与IE中略有不同
4 服务器响应完成
readyState 3的注意事项:
在Firefox中readyState 3多次调用onreadystatechange句柄,以提供下载反馈过程,脚本可能使用这些多次调用来为用户显示一个进度指示器,而在IE中readyState 3只调用一次