接觸Ajax,那時候的Ajax支援還不是很好,都要涉及底層,沒有現成的架構給你調用。現在把常見的問題列舉如下。
1、編碼問題
注意AJAX要取的檔案是UTF-8編碼的。GB2312編碼傳回BROWSE後中文會亂碼。如果用VBScript的話還可以轉化,但是VBScript只有IE支援。
所以,選擇UTF-8編碼是一勞永逸的辦法。
2、清除伺服器端檔案的緩衝。
當用XMLHTTP取回一個伺服器端的檔案,檔案會緩衝在瀏覽器端。下次再取檔案時,不會再去伺服器取檔案。所以,對於重新整理頻繁的檔案,一定要指定檔案的到期時間。
3、什麼時候使用XML
Ajax裡的X指的就是XML,可是真的XML就是最好的解決方案嗎?XML和JSON相比,在傳遞同等量的資訊時,XML檔案更大。所以往往JSON是更好的選擇。不過,你還可以直接輸出Javascript執行,這樣的效率往往更高:不需要寫複雜的回呼函數。不過安全問題也要更加註意。
4、兩種Ajax的方式
一些人的基礎可能還不是很紮實,並不非常瞭解Ajax的原理,那你知道Ajax由哪兩種方式來實現嗎?
最古老的一種是iframe來載入一個包含js的網頁,這個網頁裡的指令碼用 top.function來調用parent頁面裡的函數。但是,你可以指定a的target和form的target,這樣就不用序列化表單,實際上能很方便地發送表單。當然後期就稍微有點麻煩,出現問題也不容易解決。
後來就是xmlhttp組件的方式。什麼時候挑選什麼方式,這也是一種技巧。
5、跨域問題
如果一個指令碼不在同一個域,兩者就不能相互調用。如果iframe裡是其他域的網頁,就不能訪問parent頁的具體內容。如果需要訪問遠端XML,比如RSS FEED,建議可以用伺服器端指令碼來中轉。在訪問量不是非常大的情況下還是很很好的一個解決辦法。不過,翻閱JQuery手冊發現它能調用(執行)跨域的指令碼,具體怎麼做的還不是很清楚。大家可以下載JQUERY未加密的版本來研究下。
6、安全問題
在伺服器端,雖然用戶端能預先處理很多東西,你仍要注意一句話:一切來自用戶端的變數都是有害的。不在Ajax的情況下很多程式員往往會放鬆警惕。這使得安全問題更隱蔽。如果是開來源程式的話那麼問題就會在網友面前馬上暴露出來;黑盒的情況下,往往被入侵了還是找不出原因。
結語:實際上在這個架構橫行的年代直接編寫Ajax實現代碼的機會並不多,很多JS架構都整合了AJAX調用函數,一些伺服器端的架構,例如THINKPHP也整合了AJAX。但是,理解一些底層的東西,還是有利於排除BUG,提高AJAX應用的效能的。