|
|
類型: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 - 2021. | 您尚未登錄 |