MSXML中提供了Microsoft.XMLHTTP對象,能夠完成從封包到Request對象的轉換以及發送任務。
建立XMLHTTP物件的語句如下:
Set objXML = CreateObject("Msxml2.XMLHTTP") 或
Set objXML = CreateObject(“Microsoft.XMLHTTP”)
' Or, for version 3.0 of XMLHTTP, use:
' Set xml = Server.CreateObject("MSXML2.ServerXMLHTTP")
物件建立後呼叫Open方法對Request物件進行初始化,語法格式為:
poster.open http-method, url, async, userID, password
Open方法中包含了5個參數,前三個是必要的,後兩個是可選的(在伺服器需要進行身份驗證時提供)。參數的意義如下所示:
http-method: HTTP的通訊方式,例如GET或是POST
url: 接收XML資料的伺服器的URL位址。通常在URL中要指明ASP或CGI程式
async: 一個布林標識,說明請求是否為非同步的。如果是非同步通訊方式(true),客戶機就不等待伺服器的回應;如果是同步方式(false),客戶機就要等到伺服器回傳訊息後才去執行其他操作
userID 使用者ID,用於伺服器驗證
password使用者密碼,用於伺服器驗證
XMLHTTP物件的Send方法
用Open方法對Request物件進行初始化後,呼叫Send方法傳送XML資料:
poster.send XML-data
Send方法的參數類型是Variant,可以是字串、DOM樹或任意資料流。發送資料的方式分為同步和非同步兩種。在非同步方式下,資料包一旦發送完畢,就結束Send進程,客戶機執行其他的操作;而在同步方式下,客戶機要等到伺服器回傳確認訊息後才結束Send進程。
XMLHTTP物件中的readyState屬性能夠反映出伺服器在處理請求時的進展狀況。客戶機的程式可以根據這個狀態資訊設定對應的事件處理方法。屬性值及其意義如下表所示:
值說明
0 Response物件已經創建,但XML文件上載過程尚未結束
1 XML文檔已經載入完畢
2 XML文檔已經載入完畢,正在處理中
3 部分XML文件已經解析
4 文件已經解析完畢,客戶端可以接受回傳訊息用戶機處理回應訊息用戶端接收到回傳訊息
後
,進行簡單的處理,基本上就完成了C/S之間的一個互動週期。客戶機接收響應是通過XMLHTTP對象的屬性實現的:
● responseTxt:將返回消息作為文本字符串;
● responseXML:將返回消息視為XML文檔,在服務器響應消息中含有XML數據時使用;
● responseStream:將回傳訊息視為Stream物件
------就是下面這個很簡單的JAVASCRIPT函數SEND(STR,URL)---------------
使用到的是XMLDOM和XMLHTTP物件.用這種技術的好處是:全JS控制,方便/簡單,比RDS或者remote好多了.(前提:伺服器端和客戶端都必須安裝IE5或者更高版本),在俺貼的那個無刷新在線信息功能使用的也是這種技術.有興趣的朋友可以看看..
function Send(Str,URL)
//STR參數是傳入的XML資料,你也可以傳入其他文字資料.
//不過這個函數需要伺服器端處理之後回傳XML資料,你也可以修改一下
//URL參數表示你要處理資料的ASP檔案位址
{
var Http = new ActiveXObject("Microsoft.XMLHTTP") //建立XMLHTTP物件var Dom = new ActiveXObject("Microsoft.XMLDOM") //建立XMLDOM物件Http.open("POST",URL,false)
//第一個參數的意思是,用"POST"方式傳送資料.可以大到4MB,也可以換成"GET".只能256KB
//第2個參數的意思是資料傳送到哪個檔案處理//第3個參數意思是同步或非同步方式.TRUE為非同步,FALSE為同步Http.send(Str) //開始傳送資料.... ....嘟嘟..
Dom.async=false //設定為同步方式取得資料Dom.loadXML(Http.responseText)
//開始取得伺服器端處理後傳回的資料.我在這裡設定必須為XML資料,否則出錯.
//你也可以自己修改.使回傳的是2進位或記錄集資料.......................... ..
if(Dom.parseError.errorCode != 0) //檢查是否發生取得資料時錯誤{
delete(Http)
delete(Dom)
return(false)
}
else
{
var Back = Dom.documentElement.childNodes.item(0).text
//得到回傳的XML資料,我這裡假設處理程序只回傳一行XML資料(一個節點)
delete(Http)
delete(Dom)
return(Back) //函數回傳資料.......................結束}
}
VAR CAT = Send("<使用者資料><姓名>謝檸檬</姓名></使用者資料>"," HTTP://WWW.CHINAASP.COM/VIVA.ASP ") //執行函數
IF(CAT == FALSE)
{
ALERT("對不起.處理程序回傳的是FALSE.資料處理已經失敗........")
}
ELSE
{
IF(EVAL(CAT))
{
ALERT("OK.資料已經傳送成功.兼以處理完成!!!!!!")
}
ELSE
{
ALERT("對不起.處理程序回傳的是FALSE.資料處理已經失敗........")
}
}
===============================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