MSXML中提供了Microsoft.XMLHTTP對象,能夠完成從數據包到Request對象的轉換以及發(fā)送任務(wù)。
創(chuàng )建XMLHTTP對象的語(yǔ)句如下:
Set objXML = CreateObject("Msxml2.XMLHTTP") 或
Set objXML = CreateObject(“Microsoft.XMLHTTP”)
‘ Or, for version 3.0 of XMLHTTP, use:
‘ Set xml = Server.CreateObject("MSXML2.ServerXMLHTTP")
對象創(chuàng )建后調用Open方法對Request對象進(jìn)行初始化,語(yǔ)法格式為:
poster.open http-method, url, async, userID, password
Open方法中包含了5個(gè)參數,前三個(gè)是必要的,后兩個(gè)是可選的(在服務(wù)器需要進(jìn)行身份驗證時(shí)提供)。參數的含義如下所示:
http-method: HTTP的通信方式,比如GET或是 POST
url: 接收XML數據的服務(wù)器的URL地址。通常在URL中要指明 ASP或CGI程序
async: 一個(gè)布爾標識,說(shuō)明請求是否為異步的。如果是異步通信方式(true),客戶(hù)機就不等待服務(wù)器的響應;如果是同步方式(false),客戶(hù)機就要等到服務(wù)器返回消息后才去執行其他操作
userID 用戶(hù)ID,用于服務(wù)器身份驗證
password 用戶(hù)密碼,用于服務(wù)器身份驗證
XMLHTTP對象的Send方法
用Open方法對Request對象進(jìn)行初始化后,調用Send方法發(fā)送XML數據:
poster.send XML-data
Send方法的參數類(lèi)型是Variant,可以是字符串、DOM樹(shù)或任意數據流。發(fā)送數據的方式分為同步和異步兩種。在異步方式下,數據包一旦發(fā)送完畢,就結束Send進(jìn)程,客戶(hù)機執行其他的操作;而在同步方式下,客戶(hù)機要等到服務(wù)器返回確認消息后才結束Send進(jìn)程。
XMLHTTP對象中的readyState屬性能夠反映出服務(wù)器在處理請求時(shí)的進(jìn)展狀況??蛻?hù)機的程序可以根據這個(gè)狀態(tài)信息設置相應的事件處理方法。屬性值及其含義如下表所示:
值 說(shuō)明
0 Response對象已經(jīng)創(chuàng )建,但XML文檔上載過(guò)程尚未結束
1 XML文檔已經(jīng)裝載完畢
2 XML文檔已經(jīng)裝載完畢,正在處理中
3 部分XML文檔已經(jīng)解析
4 文檔已經(jīng)解析完畢,客戶(hù)端可以接受返回消息
客戶(hù)機處理響應信息
客戶(hù)機接收到返回消息后,進(jìn)行簡(jiǎn)單的處理,基本上就完成了C/S之間的一個(gè)交互周期??蛻?hù)機接收響應是通過(guò)XMLHTTP對象的屬性實(shí)現的:
● responseTxt:將返回消息作為文本字符串;
● responseXML:將返回消息視為XML文檔,在服務(wù)器響應消息中含有XML數據時(shí)使用;
● responseStream:將返回消息視為Stream對象
------就是下面這個(gè)很簡(jiǎn)單的JAVASCRIPT函數SEND(STR,URL)---------------
使用到的是XMLDOM和XMLHTTP對象.用這種技術(shù)的好處是:全JS控制,方便/簡(jiǎn)單,比RDS或者remote好多了.(前提:服務(wù)器端和客戶(hù)端都必須安裝IE5或者更高版本),在俺貼的那個(gè)無(wú)刷新在線(xiàn)信息功能使用的也是這種技術(shù).有興趣的朋友可以看看..
function Send(Str,URL)
//STR參數是傳入的XML數據,你也可以傳入其他文本數據.
//不過(guò)這個(gè)函數需要服務(wù)器端處理之后返回XML數據,你也可以修改一下
//URL參數表示你所要處理數據的ASP文件地址
{
var Http = new ActiveXObject("Microsoft.XMLHTTP") //建立XMLHTTP對象
var Dom = new ActiveXObject("Microsoft.XMLDOM") //建立XMLDOM對象
Http.open("POST",URL,false)
//第一個(gè)參數的意思是,用"POST"方式發(fā)送數據.可以大到4MB,也可以換為"GET".只能256KB
//第2個(gè)參數的意思是數據發(fā)送到哪個(gè)文件處理
//第3個(gè)參數意思是同步或異步方式.TRUE為異步,FALSE為同步
Http.send(Str) //開(kāi)始發(fā)送數據.............嘟嘟..
Dom.async=false //設置為同步方式獲取數據
Dom.loadXML(Http.responseText)
//開(kāi)始獲取服務(wù)器端處理后返回的數據.我在這里設置必須為XML數據,否則出錯.
//你也可以自己修改.使返回的是2進(jìn)制或者記錄集數據.................................
if(Dom.parseError.errorCode != 0) //檢查是否發(fā)生獲取數據時(shí)錯誤
{
delete(Http)
delete(Dom)
return(false)
}
else
{
var Back = Dom.documentElement.childNodes.item(0).text
//得到返回的XML數據,我這里假設處理程序只返回一行XML數據(一個(gè)節點(diǎn))
delete(Http)
delete(Dom)
return(Back) //函數返回數據.......................結束
}
}
VAR CAT = Send("<用戶(hù)資料><姓名>謝檸檬</姓名></用戶(hù)資料>","HTTP://WWW.CHINAASP.COM/VIVA.ASP") //執行函數
IF(CAT == FALSE)
{
ALERT("對不起.處理程序返回的是FALSE.數據處理已經(jīng)失敗........")
}
ELSE
{
IF(EVAL(CAT))
{
ALERT("OK.數據已經(jīng)發(fā)送成功.兼以處理完成!!!!!!")
}
ELSE
{
ALERT("對不起.處理程序返回的是FALSE.數據處理已經(jīng)失敗........")
}
}
===============================VIVA.ASP============================
ON ERROR RESUME NEXT
DIM BOBO
DIM MOMO
SET BOBO = SERVER.CREATEOBJECT("MICROSOFT.XMLDOM")
BOBO.ASYNC = FALSE
BOBO.LOAD REQUEST
IF BOBO.PARSEERROR.ERRORCODE <> 0 THEN
RESPONSE.WRITE("<程序處理結果><最終結果>FALSE</最終結果></程序處理結果>")
ELSE
SET MOMO = BOBO.DOCUMENTELEMENT
IF MOMO.CHILDNODES.ITEM(0).TEXT = "謝檸檬" THEN
RESPONSE.WRITE("<程序處理結果><最終結果>TRUE</最終結果></程序處理結果>")
ELSE
RESPONSE.WRITE("<程序處理結果><最終結果>FALSE</最終結果></程序處理結果>")
END IF
END IF
SET BOBO = NOTHING
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。