現(xiàn)在提起AJAX,大家都立刻會(huì)想起Gmail、gogle map這幾個(gè)經(jīng)典的AJAX應(yīng)用。Gmail的優(yōu)良表現(xiàn)我們都看過了,那么它的實(shí)現(xiàn)你研究過了嗎?它怎么在幾個(gè)不同的瀏覽器上可以一致的實(shí)現(xiàn)xml異步調(diào)用的呢?一起來看看吧。
首先,登錄gmail以后我們會(huì)先進(jìn)入這個(gè)頁面:
<head>
<meta content="text/html; charset=UTF-8" http-equiv="content-type">
<title>Gmail< SPAN>title>
<link rel="alternate" type="application/atom+xml" title="Gmail Atom Feed" href="feed/atom" />
<script src="?view=page&name=browser&ver=c0d3d44c64799453">< SPAN>script>
< SPAN>head>
<noscript>
<font face=arial>
應(yīng)啟用 JavaScript,才能在標(biāo)準(zhǔn)視圖中使用 Gmail。然而,JavaScript 似乎已被禁用,要么就是您的瀏覽器不支持 JavaScript。要使用標(biāo)準(zhǔn)視圖,請(qǐng)更改您的瀏覽器選項(xiàng)以啟用 JavaScript,然后<a href="">重試< SPAN>a>。<p>要使用 Gmail 的基本 HTML 視圖(不需要 JavaScript),<a href="?ui=html&zy=n">請(qǐng)單擊此處< SPAN>a>。< SPAN>p>
< SPAN>font>
< SPAN>noscript>
<script>
< SPAN>script>
< SPAN>html>
這是主框架網(wǎng)頁兼瀏覽器檢測(cè)頁。如果瀏覽器通過了檢測(cè)(支持javascript、cookie和xml控件)則在頁面上寫一段框架代碼
要注意到的是google在這里耍了一個(gè)小花招,那個(gè)叫做main的框架頁面里面看來沒有多少東西,好東東都在那個(gè)叫js的框架里面呢。
我們接著把這個(gè)js框架拉出來看看:
這個(gè)頁面有240多k,幾乎全都是javascript代碼。有興趣分析的兄弟姐妹們請(qǐng)點(diǎn)這里下載。
其實(shí)其中大部分都是老生常談的js代碼了,不過我們可以一窺google的編碼風(fēng)格:盡可能壓縮信息量,變量名能用一個(gè)字母的絕不用兩個(gè),函數(shù)名一概都是兩個(gè)字母的,函數(shù)內(nèi)的會(huì)車是沒有的,縮進(jìn)也是沒有的。雖然代碼沒有特地加密,但是如此處理一番之后也就沒什么可讀性了。還好系統(tǒng)的關(guān)鍵字是不能縮水的,順著xml控件的名字我們可以揪出來跟AJAX異步加載數(shù)據(jù)相關(guān)的幾個(gè)關(guān)鍵函數(shù):
//emu注釋 構(gòu)造XML控件并返回給調(diào)用者
function ot(a,b){;try{a.send(b)}catch(c){q(c);if(c.number==-2146697208){alert("請(qǐng)確保 Internet Explorer 的”語言

//emu注釋 執(zhí)行發(fā)送數(shù)據(jù)操作 a:XML控件 b:要發(fā)送的數(shù)據(jù)
function Wf(a,b,c){Da(3);b=Ld(b);Hf(a,b,c)}
//emu注釋 a:XML控件 b:訪問的url c:回調(diào)函數(shù) Da是驗(yàn)證參數(shù)長(zhǎng)度的函數(shù)
//Ld是一個(gè)url轉(zhuǎn)換加工的函數(shù),主要處理url自帶的CGI參數(shù)和翻頁的頁數(shù)等
function Hf(a,b,c){Da(3);a.onreadystatechange=c;a.open("GET",b,true);ot(a,null)}
//emu注釋 不發(fā)送數(shù)據(jù)直接請(qǐng)求資源 a:XML控件 b:訪問的url c:回調(diào)函數(shù)
function nt(a,b,c,d){Da(4);a.onreadystatechange=d;a.open("POST",b,true);ot(a,c)}
//emu注釋 發(fā)送數(shù)據(jù)并請(qǐng)求資源 a:XML控件 b:訪問的url c:要發(fā)送的數(shù)據(jù) d:回調(diào)函數(shù)
基本上就這么多了,很失望吧,沒有什么新鮮的東西。發(fā)送http請(qǐng)求之后它又怎么處理返回的xml的呢?事實(shí)上他沒有處理。他所處理的僅僅是最基本responseText,而cgi則直接生成js腳本到客戶端回調(diào)(用eval運(yùn)行),或者生成文本信息。這就是為什么gmail可以輕松跨域幾個(gè)瀏覽器了。
作為最受推崇的一個(gè)AJAX應(yīng)用,卻幾乎沒有用到xml。像這樣用xml控件來收發(fā)文本信息后在頁面上展現(xiàn)的技術(shù),基本上就是現(xiàn)在AJAX最流行的應(yīng)用方式了,不過這樣也能叫AJAX嗎?我寧可就叫它AJ,最多叫AJAH。
今天先到這,下回再過來分析另一個(gè)完全不同的AJAX應(yīng)用吧。大家周末愉快!