設為首頁

收藏本站

導覽首頁 | 新登場    ◇聯盟溫泉 | 民宿 | 人力銀行 | 女性 |

類型:js_article

Ajax的一些有用的小技巧網頁

在使用ajax過程中,有時候總會遇到一些難題,瀏覽器兼容、編碼、ie下的特殊處理等等,偶爾會搞的人頭昏腦脹哭笑不得,這裡列一些小貼士,或許有些用。

使用javascript庫

ajax的流行和巨大威力,讓我們重新審視了javascript的開發,也直接促使各種庫的出現。對於普通的開發者,使用一些適合自己的javascript庫不僅可以避免ajax應用上的瀏覽器兼容等問題,也使其開發更加的穩定和高效。這裡列一些我知曉的輕量級的javascript庫:


yui:yahoo出品,組件豐富強大健壯穩定,是團隊協作開發的首選。
jquery:靈活、高效,其基於css3 和xpath的選擇器語法引擎非常的強大和完整。
prototype:是一個非常優雅的javascript庫,最經典的莫過於$符號了,dwr,jquery都被它吸引了。在它基礎上出現了script.aculo.us。
mootobs:核心語法和prototype比較類似,但是用過之後才知道什麼叫簡單輕巧和短小精悍。

編碼問題

通過xmlhttprequest獲取的數據,默認的字符編碼是utf-8,如果前端頁面是gb2312或者其它編碼,顯示獲取的數據就是亂碼。通過xmlhttprequest,post的數據也是utf-8編碼,如果後台是gb2312或者其他編碼也會出現亂碼。解決方法:


統一到utf-8。這也是國際化的必然趨勢。
輸出通過xmlhttprequest獲取的文本文本時,在headers中增加文本聲明(直接html聲明沒有作用)。如:
php:header('content-type:text/html;charset=gb2312');
asp:response.charset = "gb2312"
jsp:response.setheader("charset","gb2312");
www服務器上強制聲明。比如:apache下的配置:
<spancode>adddefaultcharset gb2312

這種情況主要是應對通過xmlhttprequest訪問的文件是靜態文件,無法聲明headers的情況下。
靜態頁面一般都會經過apache的deflate或gzip壓縮,此時在上面情況下ie中,首次通過xmlhttprequest獲得的數據可以正常顯示,但再獲取數據顯示時出現亂碼,這次因為再次獲取的數據來自緩存,可能由於瀏覽器解壓縮的問題導致apache設置的默認編碼聲明丟失。由於這種情況下一般是純文本,可能還無法禁止緩存,可以設置xmlhttprequest訪問的文本文件不壓縮來解決這個問題。
非utf-8頁面通過xmlhttprequest獲取的文本文本輸出前字符轉碼成unicode,或者編碼直接是utf-8,可以正常顯示。如<a href="http://dancewithnet.com/lab/2007/09/ajax-tips/"

ie下的緩存問題

由於ie的緩存處理機制問題,每次通過xmlhttprequest訪問動態頁面返回的總是首次訪問的內容,解決方法有:


客戶端通過添加隨機字符串解決。如:
<spancode>var url = 'http://dancewithnet.com/';
url +=  '?tbp=' + new date().gettime();
url +=  '?tbp=' + math.random();
在http headers禁止緩存。如:
<spancode>http:
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-contrb" content="no-cache, must-revalidate" />
<meta http-equiv="expires" content="thu, 01 jan 1970 00:00:01 gmt" />
<meta http-equiv="expires" content="0" />
php:
header("expires: thu, 01 jan 1970 00:00:01 gmt");
header("cache-contrb: no-cache, must-revalidate");
header("pragma: no-cache");
asp:
response.expires=0
response.addheader("pragma","no-cache")
response.addheader("cache-contrb","no-cache, must-revalidate")
jsp:
response.addheader("cache-contrb", "no-cache");
response.addheader("expires", "thu, 01 jan 1970 00:00:01 gmt");
在xmlhttprequest發送請求之前加上:
<spancode>xmlhttprequest.setrequestheader("if-modified-since","0");
xmlhttprequest.send(null);

ie下的reponsexml問題

使用responsexml時,ie下只能接受.xml為後綴的xml文件,如果不能以.xml文件為結尾的,則需要如下處理:


在服務器端聲明是xml文件類型。如:
<spancode>php:header("content-type:text/xml;charset=utf-8");
asp:response.contenttype = "text/xml";
jsp:response.setheader("contenttype","text/xml");
利用responsetext獲取,然後封裝成xml。
在ajax應用上,json和jsonml是xml非常好的替代品。


主旨:

內容:




104休閒信箱 2.3.0 © 104mm.com 2001 - 2017. 您尚未登錄
Page generated in 0.00904107 seconds with 3 Queries