导航

闲谈

« 在客户端使用javascript的xmlhttp对象简单小偷程序实例 »

xmlhttp可能的错误和解决方法

看看下面的一个函数,摘自sxna:一个blog聚合程序,网站地址:http://www.sxna.cn

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可能遇到的错误更多,我们可以用前面提到的办法解决。

  • 相关文章:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Search

控制面板

最新评论及回复

最近发表