XMLHTTP的请求同步和异步、方法的GET和POST


xmlhttp的请求同步和异步、方法的get和post



Public Function GetXml
        on error resume next
            Dim objXMLHTTP
            Set objXMLHTTP = Server.CreateObject("Msxml2.ServerXMLHTTP")
            objXMLHTTP.setTimeouts lResolve*1000,lConnect*1000,lSend*1000,lReceive*1000
            objXMLHTTP.Open "GET",XmlUrl,False
            objXMLHTTP.Send
            Select Case ObjXMLHTTP.readyState
                Case 0
                call Showerr("对象初始化失败,估计你输入了一堆无效的字符....","请检查一下~","错误参数:"&Err.Number&Err.Description)
                GetXml=False
                Case 1
                call Showerr(XmlUrl&"域名分析超时/连接站点超时!也许是这个网站有问题,或许是超时设定太短,或许机器没有联网","请检查","错误参数:"&Err.Number&Err.Description)
                GetXml=False
                Case 2           
                call Showerr(XmlUrl&"发送数据请求超时,是不是服务器出故障了?","请检查","错误参数:"&Err.Number&Err.Description)
                GetXml=False
                Case 3
                    ContentLength=objXMLHTTP.GetResponseHeader("Content-Length")
                    If err.number=-2147012746 then
                    Call Showerr(XmlUrl&"数据下载超时/等待反馈时间超时","原因如下","没有获得文件大小的信息,估计网站有问题,可能是你的等待反馈时间超时设定太短")
                    Else
                    Call Showerr(RSSLINK_S&"数据下载超时/等待反馈时间超时","原因如下","该文件大小"&Formatnumber(ContentLength/1000,2)&"KB,下载过程中超过你设定的等待反馈时间超时时间,可能是你的等待反馈时间超时设定太短了,或许这个网站他就是慢...")
//niceidea 签名留念
                    End If
                Err.clear
                GetXml=False
                Case 4
                    ContentLength=objXMLHTTP.GetResponseHeader("Content-Length")
                    If err.number=-2147012746 then
                        If objXMLHTTP.Status=200 Then
                            call Showerr(XmlUrl&"没有找到文件长度信息,估计是这个网站的rss设计有问题","","操作继续..附加头信息供调试"&objXMLHTTP.GetAllResponseHeaders)
                            strXmlFile=objXMLHTTP.responseBody
                            GetXml=True
                        Else
                            call Showerr_http(XmlUrl,objXMLHTTP.status)
                            GetXml=False
                        End If
                        err.clear
                    ElseIf err.number<>0 then
                        call Showerr(XmlUrl&"有未知错误发生","有错误","错误参数:"&Err.Number&Err.Description)
                        GetXml=False
                        err.clear
                    Else
                        If objXMLHTTP.Status=200 Then
                            strXmlFile=objXMLHTTP.responseBody
                            GetXml=True
                        Else
                            call Showerr_http(XmlUrl,objXMLHTTP.status)
                            GetXml=False
                        End If
                    End If
            End Select
    End Function
    ok,这个程序充分说明了发生的可能错误。包括对象初始化失败,远端uri错误,http连接相应超时等等。
当然,一般情况下我们没有必要将错误的内涵解释得如此清楚。
    一般的我们只需要分析一下ObjXMLHTTP.readyState的readyState,以确保对象正确的创建了;然后分析一下返回的objXMLHTTP.status是否为http 200。
    例如:
    Dim Http
    Set Http=Server.CreateObject("MSXML2.XMLHTTP.4.0")
    With Http
        .open "GET",HttpUrl,False
        .Send
    End With
    On Error Resume Next
    If Http.Status<>200 then
        Set Http=Nothing
        ......
        Exit function
    End if
End Function
至于服务器是否支持在asp中使用这个东东,应该是无须顾虑的。
下面是本机的HKEY_CLASSES_ROOT中导出的一些东西;一般的2000和2003服务器,都是支持MSXML2的。或者至少支持较低版本的xmldom。
项名称:             HKEY_CLASSES_ROOT/Msxml2.DOMDocument.2.6
类别名:         <无类别>
最近写入时间:    2006-3-17 - 21:43
值  0
  名称:            <NO NAME>
  类型:            REG_SZ
  数据:            XML DOM Document 2.6
项名称:             HKEY_CLASSES_ROOT/Msxml2.DOMDocument.2.6/CLSID
类别名:         <无类别>
最近写入时间:    2006-3-17 - 21:43
值  0
  名称:            <NO NAME>
  类型:            REG_SZ
  数据:            {f5078f1b-c551-11d3-89b9-0000f81fe221}
在客户端的xmlhttp可能遇到的错误更多,因为浏览器是完全不可控制的。我们在编写javascript脚本的时候,必须考虑这些东西。
本文来源于悠悠博客 http://www.ajaxstu.com/ , 原文地址:http://www.ajaxstu.com/archives/2753_HE.html


 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值