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