Ajax学习日记(五)

感冒了一阵,继续学习,整理一下前段写的代码


一、xmlHttpRequest
Ajax中一个关键的是xmlHttpRequest对象,xmlHttpRequest对象目前还不是W3C标准,因而在写代码中要注意不同浏览器的兼容性

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

xmlHttpRequest的几个主要方法和属性

Open("method","url","asynch")
asynch默认为false,如果不填写true就同步方式,感觉这个参数应该默认为true

使用异步方式需要对OnReadStateChange触发事件进行编程,得到response,
有三种方式
1.xmlHttp.responseText
2.xmlHttp.responseXML
3.xmlHttp.responseBody
第一种通常只是测试或者使用简单返回信息
第二种是直接返回一个xml对象,用于操作返回的DOM对象
第三种非常有用,在返回结果中带有中文字符就需要用到这个了,具体后面在说


还需要用到两个属性
ReadyState
status

二、DOM
 DOM是一个W3C约定,我的理解DOM将html的元素作为层次对象管理起来的一个模型,没有xmlHttp,就无法实现方便得与服务器通讯,而没有DOM则任何通讯也是无意义得,DOM能让你很好得操作界面,快速找到需要操作的内容。但目前好像ie和其他浏览器的DOM使用方式略有差异,DOM使Javascript编程充满了生命力

关于html的DOM的使用可以去网山搜一下,对于每个元素(table,form,etc)都有特殊的属性方法,这里列举一下用于处理XML的DOM元素属性
childnodes
firstchild
lastchild
nextsibling
nodevalue
parentnode
previoussibling
这些属性从名字上直接可以看出用途,和delphi中XMLDocument或MS XML用法类似,常用的方法有
getElementByID(ID)
GetElementByTagName(name)
hasChildNodes()
GetAttribute(name)


三、编码
Ajax中使用的字符编码默认是UTF-8,这在老外使用没有任何问题,但是我们使用中文时需要用到GB2312,查了很多资料,没有什么特别好的办法,最方便的做法就是引用网上一个牛人写的转码函数
<SCRIPT language="VBScript">
Function URLEncoding(vstrIn)
    strReturn = ""
    For i = 1 To Len(vstrIn)
        ThisChr = Mid(vStrIn,i,1)
        If Abs(Asc(ThisChr)) < &HFF Then
            strReturn = strReturn & ThisChr
        Else
            innerCode = Asc(ThisChr)
            If innerCode < 0 Then
                innerCode = innerCode + &H10000
            End If
            Hight8 = (innerCode  And &HFF00)/ &HFF
            Low8 = innerCode And &HFF
            strReturn = strReturn & "%" & Hex(Hight8) &  "%" & Hex(Low8)
        End If
    Next
    URLEncoding = strReturn
End Function
Function bytes2BSTR(vIn)
    strReturn = ""
    For i = 1 To LenB(vIn)
        ThisCharCode = AscB(MidB(vIn,i,1))
        If ThisCharCode < &H80 Then
            strReturn = strReturn & Chr(ThisCharCode)
        Else
            NextCharCode = AscB(MidB(vIn,i+1,1))
            strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
            i = i + 1
        End If
    Next
    bytes2BSTR = strReturn
End Function
</SCRIPT>
用了一下,很好使,不过得用刚才所说得responseBody,而不能用ResponseText。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值