Remote Scripting (RS)老早以前我就一直在說(shuō)這個(gè)技術(shù)名詞了, 它到底是個(gè)什么東東了,其實(shí)RS是一種遠(yuǎn)程調(diào)用你的ASP頁(yè)面 (當(dāng)然是調(diào)用你指定的URL中的ASP頁(yè)面了)中的某個(gè)函數(shù)或者方法 的技術(shù)。 該技術(shù)主要有三大優(yōu)點(diǎn): I。你能夠優(yōu)化你每次從客戶(hù)端到服務(wù)端的一個(gè)來(lái)回?cái)?shù)據(jù)流程 II。你能夠在不同的ASP頁(yè)面中重用(就是多次使用)同一個(gè)函數(shù)或則方法 III。當(dāng)你連接到遠(yuǎn)程的ASP頁(yè)面時(shí)不會(huì)刷新你的當(dāng)前正在瀏覽的頁(yè)面 上面是它的三大特點(diǎn),下面講講具體的過(guò)程。 RS讓你直接調(diào)用(或則說(shuō)建立一個(gè)到服務(wù)端的連接) 注意,這也是它和RDS的不同的地方,RDS是通過(guò)一個(gè)類(lèi)似與代理的機(jī)制并且 建立的連接是在一個(gè)斷開(kāi)連接的記錄集基礎(chǔ)上的。 RS在建立這個(gè)連接的時(shí)候,是不會(huì)影響當(dāng)前所在的ASP頁(yè)面的。 一旦你建立了這樣的一個(gè)連接后,你就能夠調(diào)用任何一個(gè)在你的遠(yuǎn)程頁(yè)面中 申明為public的函數(shù)。然后你可以把調(diào)用頁(yè)面需要的所有數(shù)據(jù)緩存在本地, 當(dāng)客戶(hù)端的頁(yè)面接受到遠(yuǎn)程調(diào)用函數(shù)的返回值后,這些返回值有可能是 一個(gè)數(shù)組(array),記錄集(recordset),字符串(string) 接下來(lái)你就可以使用客戶(hù)端的數(shù)據(jù)處理技術(shù)(例如客戶(hù)端的JS,DHTML等)來(lái)對(duì)這些 數(shù)據(jù)進(jìn)行處理了。這些數(shù)據(jù)你完全可以當(dāng)作好象就是使用客戶(hù)端的 腳本函數(shù)得到的一樣。
RS的基本原理: RS是通過(guò)“RS.HTM”(這是一個(gè)客戶(hù)端的模塊)和“RS.asp”(這是一個(gè)服務(wù)端的模塊) 來(lái)建立一個(gè)客戶(hù)端到服務(wù)端的連接的。 當(dāng)然其中使用了一個(gè)后臺(tái)加入到客戶(hù)端的Java applet來(lái)實(shí)現(xiàn)的。 該applet通過(guò)HTTP傳遞你要調(diào)用服務(wù)端上特定的ASP頁(yè)面和參數(shù)。 而客戶(hù)端的頁(yè)面通過(guò)調(diào)用本地的rs.htm中的函數(shù)來(lái)進(jìn)行每次的遠(yuǎn)程調(diào)用申請(qǐng)。 所以了,大家可以想象得到要想使用RS技術(shù)的話(huà),那么在你的ASP頁(yè)面中就必須要 包括這些特定的頁(yè)面
如何使用RS 一般只要你安裝了VI后,就有了所需要的東西了。 主要是下面的三個(gè)文件:rsproxy.class, rs.asp, rs.htm. 把它們放到這個(gè)目錄中wwwroot\_ScriptLibrary 客戶(hù)端的寫(xiě)法: 然后在你想使用RS的頁(yè)面的最前面包含這幾個(gè)文件: <script language="JavaScript" src="http://YourServer/_ScriptLibrary/rs.htm"> </script> <script language="JavaScript"> serverURL = "http://YourServer/_ScriptLibrary "; RSEnableRemoteScripting(serverURL); </script> 注意其中的serverURL,它必須是你想調(diào)用服務(wù)端asp的URL地址的全寫(xiě)。 例如:http://YourServer/rsdemo/server.asp 服務(wù)端的寫(xiě)法: 還要注意的是你必須要使用JavaScript來(lái)寫(xiě)你的遠(yuǎn)程調(diào)用部分(就是服務(wù)端的程序) ,因?yàn)檫@些RS函數(shù)在服務(wù)端都是使用JS寫(xiě)的。 一個(gè)通用的寫(xiě)法如下: '必須先調(diào)用RSDispatch,而且對(duì)大小寫(xiě)敏感 <% RSDispatch %> <SCRIPT RUNAT=SERVER Language=javascript> <!--#INCLUDE VIRTUAL="/_ScriptLibrary/RS.ASP"--> ASP遠(yuǎn)程調(diào)用對(duì)象的寫(xiě)法很象是在寫(xiě)DHTML的腳本.事實(shí)上,它必須要支持一個(gè)public_description 對(duì)象來(lái)描述通用的公共編程接口,并且實(shí)現(xiàn)申明所有的方法和屬性: 例子如下: function Description() { this.GetEmpInfoAsArray = DoGetData; } public_description = new Description (); function DoGetData(employeeName) { //為了能夠讓RS能夠識(shí)別你自己寫(xiě)出來(lái)的函數(shù), //你必須要把它們申明成一個(gè)固定的名字public_description. //然后你可以在這個(gè)DoGetData中寫(xiě)自己想返回的東西 //在這個(gè)例子中將使用SQL字符串和ADO來(lái)查詢(xún)微軟給的例子數(shù)據(jù)庫(kù)Northwind //當(dāng)然你應(yīng)該給該數(shù)據(jù)庫(kù)建立一個(gè)叫NW的DSN aRecs = new Array(); if (rst.RecordCount == 1){ aRecs[i++] = rst.Fields("EmployeeID").Value aRecs[i++] = rst.Fields("Title").Value return aRecs; } 當(dāng)然了,你也可以把整個(gè)記錄集都返回回去。
好了,上面是整個(gè)服務(wù)端的寫(xiě)法,下面來(lái)看看客戶(hù)端怎么來(lái)處理這些返回的數(shù)據(jù)。 在客戶(hù)端可以通過(guò)一個(gè)同步的調(diào)用,如果同步調(diào)用的話(huà)所有結(jié)果都會(huì)在服務(wù)端執(zhí)行 完畢后返回, 當(dāng)然也可以通過(guò)一個(gè)異步的調(diào)用,當(dāng)你一旦調(diào)用了服務(wù)端的程序后 就馬上返回. 這些調(diào)用都是通過(guò)RS引擎中的RSExecute函數(shù)來(lái)實(shí)現(xiàn)的, 它一共有兩個(gè)參數(shù),一個(gè)是pageURL(就是前面說(shuō)的asp頁(yè)面的URL) 另外一個(gè)是funcName就是你要調(diào)用的函數(shù)名。 function RSExecute(pageURL, funcName) 現(xiàn)在我想你一定會(huì)困惑了,怎么沒(méi)有函數(shù)需要的輸入?yún)?shù)呀?呵呵。 這是因?yàn)镽SExecute將使用Javascript的arguments對(duì)象,它會(huì)把該對(duì)象中的 所有參數(shù)當(dāng)成你的函數(shù)需要的參數(shù)打包成一個(gè)數(shù)組傳遞給服務(wù)端。
co = RSExecute(pageURL, "GetEmpInfoAsArray", empName); if (co.status == 0) refreshPage(co);
function refreshPage(co) { //你想進(jìn)行的處理可以寫(xiě)在這下面
}
|
溫馨提示:喜歡本站的話(huà),請(qǐng)收藏一下本站!