XMLHTTP在使用过程中的几点体会

updated: XmlHttp.CN 开通,提供XMLHTTPRequest对象的中文参考手册,欢迎访问。

前些天帮朋友做一个网页呼叫系统,就是客户端打开网页呼叫窗口同服务器端的客服人员进行交谈,尝试了几种不同的无刷新实现方法: 一是脚本替换技术,这个使用起来非常简单,但是在收发数据时浏览器会有反应,状态栏信息和鼠标闪烁,感觉起来还是在刷新,至少看起来非常不舒服。所以转向XMLHTTP。

以前一直以为XMLHTTP只能在IE中使用,所以一开始没有考虑它,前几天Dark 让我帮他修改一个WP的插件livesearch,其中就是使用的xmlhttp,分析源码和查看msdn上的相关资料后,基本实现了所需要的功能。效果不错。

xmlhttp对象的创建方法(不同浏览器)

if (window.XMLHttpRequest) {
    var 
objSrvHTTP = new XMLHttpRequest();
} else {
    var 
objSrvHTTP = new ActiveXObject("Microsoft.XMLHTTP");

以前一直使用xmlhttp的同步方式,会造成浏览器短时间没有响应,所以使用异步方式:

with(objSrvHTTP){
    try{
        
open("GET",strUrltrue);
        
send(null);
        
onreadystatechange getReady
    
}
    catch(
e){
    }

对象状态发生变化时调用getReady

function getReady(){
    if(
objSrvHTTP.readyState == 4) {
        var 
objSrvHTTP.responseText;
        if(
!= ""){
            eval(
s);
        }
    }

这就是几个比较关键的地方,希望对以后的应用有所帮助!

附:XMLHTTP对象的属性和方法列表:

Name Type Description
onreadystatechange N/A 指定当就绪状态发生改变时调用的事件处理函数,仅用于异步操作 
readyState Long 异步操作的状态:未初始化(0),正在加载(1),已加载(2),交互(3),已完成(4)
responseBody Variant 将响应信息正文作为unsigned byte数组返回
responseStream Variant 将响应信息正文作为一个ADO Stream对象返回
responseText String 将响应信息正文作为一个文本字符串返回
responseXML Object 通过XMLDom将响应信息正文解析为XMLDocument对象
status Long 服务器返回的HTTP状态码
statusText String 服务器HTTP响应行状态

Name Desciption
abort 取消当前 HTTP 请求
getAllResponseHeaders 从响应信息中检索所有的标头字段
getResponseHeader 从响应信息正文中获得一个 HTTP 标头值
open(method, url, boolAsync, bstrUser, bstrPassword) 打开一个与 HTTP 服务器的连接
send(varBody) 设定一个请求的标头字段
setRequestHeader(bstrHeader, bstrValue) 向 HTTP 服务器发送请求。可包含正文。

open方法:

Parameter Description
method HTTP的通信方式,比如GET, HEAD, POST, PUT, DELETE, CONNECT等
url 接收数据的服务器的URL地址,URL可带QueryString
boolAsync 一个布尔标识,说明请求是否为异步的。如果是异步通信方式,客户端就不等待服务器的响应;如果是同步方式,客户机会等到服务器返回消息后才去执行其它操作
bstrUser 用户ID,用于服务器身份验证
bstrPassword 用户密码,用于服务器身份验证

6 Comments »

  1. 6666666666 said,

    January 7, 2005 @ 4:45 pm

    6

  2. ff said,

    January 11, 2005 @ 3:03 pm

    ff

  3. ss said,

    January 13, 2005 @ 5:11 pm

    gg

  4. SD said,

    March 29, 2005 @ 8:12 pm

    DD

  5. vvff said,

    September 28, 2005 @ 10:43 am

    vv

  6. freky said,

    March 15, 2006 @ 8:38 am

    我用异步的方式,总是取不到服务器端的数据,返回的readyState状态总是1,请问是什么原因呀

RSS feed for comments on this post

Leave a Comment