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