實際上,我們自己也曾用過這種方法。這在以前一般稱為遠(yuǎn)程腳本(remote scripting),很多人認(rèn)為這只是一種修修補(bǔ)補(bǔ)。不過,這確實提供了一種能避免頁面刷新的機(jī)制。
遠(yuǎn)程腳本概述
基本說來,遠(yuǎn)程腳本是一種遠(yuǎn)程過程調(diào)用類型。你可以像正常的Web應(yīng)用一樣與服務(wù)器交互,但是不用刷新整個頁面。與Ajax類似,你可以調(diào)用任何服務(wù)器端技術(shù)來接收請求、處理請求并返回一個有意義的結(jié)果。正如在服務(wù)器端有很多選擇,客戶端同樣有許多實現(xiàn)遠(yuǎn)程腳本的選擇。你可以在應(yīng)用中嵌入Flash動畫、Java applet,或者ActiveX組件,甚至可以使用XML-RPC,但是這種方法過于復(fù)雜,因此除非你使用這種技術(shù)很有經(jīng)驗,否則這種方法不太合適。實現(xiàn)遠(yuǎn)程腳本的通常做法包括將腳本與一個IFRAME(隱藏或不隱藏)結(jié)合,以及由服務(wù)器返回JavaScript,然后再在瀏覽器中運(yùn)行這個JavaScript。
Microsoft提供了自己的遠(yuǎn)程腳本解決方案,并聰明地稱之為Microsoft遠(yuǎn)程腳本(Microsoft Remote Scripting,MSRS)。采用這種方法,可以像調(diào)用本地腳本一樣調(diào)用服務(wù)器腳本。頁面中嵌入Java applet,以便與服務(wù)器通信,.asp頁面用于放置服務(wù)器端腳本,并用.htm文件管理客戶端的布局?jǐn)[放。在Netscape和IE 4.0及更高版本中都可以使用Microsoft的這種解決方案,可以同步調(diào)用,也可以異步調(diào)用。不過,這種解決方案需要Java,這意味著可能還需要附加的安裝例程,而且還需要Internet Information Services(IIS),因此會限制服務(wù)器端的選擇。
Brent Ashley為遠(yuǎn)程腳本創(chuàng)建了兩個免費(fèi)的跨平臺庫。JSRS是一個客戶端JavaScript庫,它充分利用DHTML向服務(wù)器做遠(yuǎn)程調(diào)用。相當(dāng)多的操作系統(tǒng)和瀏覽器上都能使用JSRS。如果采用一些常用的、流行的服務(wù)器端實現(xiàn)(如PHP、Python和Perl CGI),JSRS一般都能在網(wǎng)站上安裝并運(yùn)行。Ashley免費(fèi)提供了JSRS,而且還可以從他的網(wǎng)站(www.ashleyit.com
/rs/main.htm)上得到源代碼。
如果你覺得JSRS太過笨重,Ashley還創(chuàng)建了RSLite,這個庫使用了cookie。RSLite僅限于少量數(shù)據(jù)和單一調(diào)用,不過大多數(shù)瀏覽器都能提供支持。
2.5.2 遠(yuǎn)程腳本的示例
為了進(jìn)行比較,這里向你展示如何使用IFRAME來實現(xiàn)類似Ajax的技術(shù)。這非常簡單,而且過去我們就用過這種方法(在XMLHttpRequest問世之前)。這個示例并沒有真正調(diào)用服務(wù)器,只是想讓你對如何使用IFRAME實現(xiàn)遠(yuǎn)程腳本有所認(rèn)識。
這個示例包括兩個文件:iframe.html(見代碼清單2-2)和server.html(見代碼清單2-3)。server.html模擬了本應(yīng)從服務(wù)器返回的響應(yīng)。
代碼清單2-2 iframe.html文件