Ajax應(yīng)用需要注意的事項(xiàng)
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
接觸ajax,那時(shí)候的ajax支持還不是很好,都要涉及底層,沒有現(xiàn)成的框架給你調(diào)用?,F(xiàn)在把常見的問題列舉如下。[br][br]1、編碼問題[br][br]注意ajax要取的文件是utf-8編碼的。gb2312編碼傳回browse后中文會(huì)亂碼。如果用vbscript的話還可以轉(zhuǎn)化,但是vbscript只有ie支持。[br][br]所以,選擇utf-8編碼是一勞永逸的辦法。[br][br]2、清除服務(wù)器端文件的緩存。[br][br]當(dāng)用xmlhttp取回一個(gè)服務(wù)器端的文件,文件會(huì)緩存在瀏覽器端。下次再取文件時(shí),不會(huì)再去服務(wù)器取文件。所以,對(duì)于刷新頻繁的文件,一定要指定文件的過期時(shí)間。[br][br]3、什么時(shí)候使用xml[br][br]ajax里的x指的就是xml,可是真的xml就是最好的解決方案嗎?xml和json相比,在傳遞同等量的信息時(shí),xml文件更大。所以往往json是更好的選擇。不過,你還可以直接輸出javascript執(zhí)行,這樣的效率往往更高:不需要寫復(fù)雜的回調(diào)函數(shù)。不過安全問題也要更加注意。[br][br]4、兩種ajax的方式[br][br]一些人的基礎(chǔ)可能還不是很扎實(shí),并不非常了解ajax的原理,那你知道ajax由哪兩種方式來(lái)實(shí)現(xiàn)嗎?[br][br]最古老的一種是iframe來(lái)加載一個(gè)包含js的網(wǎng)頁(yè),這個(gè)網(wǎng)頁(yè)里的腳本用 top.function來(lái)調(diào)用parent頁(yè)面里的函數(shù)。但是,你可以指定a的target和form的target,這樣就不用序列化表單,實(shí)際上能很方便地發(fā)送表單。當(dāng)然后期就稍微有點(diǎn)麻煩,出現(xiàn)問題也不容易解決。[br][br]后來(lái)就是xmlhttp組件的方式。什么時(shí)候挑選什么方式,這也是一種技巧。[br][br]5、跨域問題[br][br]如果一個(gè)腳本不在同一個(gè)域,兩者就不能相互調(diào)用。如果iframe里是其他域的網(wǎng)頁(yè),就不能訪問parent頁(yè)的具體內(nèi)容。如果需要訪問遠(yuǎn)程的xml,比如rss feed,建議可以用服務(wù)器端腳本來(lái)中轉(zhuǎn)。在訪問量不是非常大的情況下還是很很好的一個(gè)解決辦法。不過,翻閱jquery手冊(cè)發(fā)現(xiàn)它能調(diào)用(執(zhí)行)跨域的腳本,具體怎么做的還不是很清楚。大家可以下載jquery未加密的版本來(lái)研究下。[br][br]6、安全問題[br][br]在服務(wù)器端,雖然客戶端能預(yù)處理很多東西,你仍要注意一句話:一切來(lái)自客戶端的變量都是有害的。不在ajax的情況下很多程序員往往會(huì)放松警惕。這使得安全問題更隱蔽。如果是開源程序的話那么問題就會(huì)在網(wǎng)友面前馬上暴露出來(lái);黑盒的情況下,往往被入侵了還是找不出原因。[br][br]結(jié)語(yǔ):實(shí)際上在這個(gè)框架橫行的年代直接編寫ajax實(shí)現(xiàn)代碼的機(jī)會(huì)并不多,很多js框架都集成了ajax調(diào)用函數(shù),一些服務(wù)器端的框架,例如thinkphp也集成了ajax。但是,理解一些底層的東西,還是有利于排除bug,提高ajax應(yīng)用的性能的。
該文章在 2010/4/27 14:12:57 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |