要解決兼容問題首先注意以下幾點:
1,document.getElementById替代document.all(ie適用)
2,集合[]替代()(ie適用)
3,target替代srcElement;parentNode替代parentElement(parentNode ie適用)
4,node.parentNode.removeChild(node)替代removeNode(this)(ie適用)
5,DOMMouseScroll替代onmousewheel;-e.detail替代event.wheelDelta
6,addEventListener替代attachEvent;removeEventListener替代detachEvent
7e.preventDefault()替代event.returnValue=false;e.stopPropagation()替代event.cancelBubble=true
8,style.top、style.left等嚴格檢查"px"單位(加"px" ie適用)
9,style="-moz-opacity:0.9"替代style="filter:alpha(opacity=90)";無其它filter
10,style.cursor="pointer"替代style.cursor="hand"(ie適用)
11,title替代alt(ie適用)
12.所有的空間在引用時都要這樣引用:document.getElementById(“XX”)。
注:標明“ie適用”者為通用性建議寫法,未標明者在ie里不適用。
在AJAX中,如果網絡或遠程服務器出現中斷,會發(fā)生什么呢?實際上,存在兩個主要問題;默認地,它們并沒有在XMLHttpRequest對象中得到解決。這兩個主要問題是:
1.處理延遲:如果網絡或遠程服務器耗費較多時間,那么這個問題如何與你的AJAX應用程序相聯系呢?
2.響應順序:潛在地,網絡(或服務器)會不斷變化。這意味著,響應可能不會以與請求相同的順序返回。
為了處理上面這兩個問題,程序員必須編寫代碼來解決這個問題。對于第一個問題,一種可能的方案如下所示:
function callInProgress(xmlhttp) {
switch ( xmlhttp.readyState ) {
case 1,2,3:
return true;
break;
//Case 4和0
default:
return false;
break;
}
}
現在,在調用send()前,我可以先檢查一下是否該對象正處于忙態(tài):
if ( !callInProgress(xmlhttp) ) {
xmlhttp.send(null);
} else {
alert("I'm busy. Wait a moment");
}
(一) 支持Ajax技術的瀏覽器
·微軟Internet Explorer版本5.0及以上版本,和基于它的瀏覽器(Mac OS版本不支持)
·基于Gecko的瀏覽器,如Mozilla,Mozilla Firefox,SeaMonkey,Epiphany,Galeon和Netscape版本7.1及以上版本
·實現KHTML API版本3.2及以上版本的瀏覽器,包括Konqueror版本3.2及以上版本,還有Apple Safari版本1.2及以上版本
·Opera瀏覽器版本8.0及以上版本,包括Opera Mobile瀏覽器版本8.0及以上版本
(二) 不支持Ajax技術的瀏覽器
·Opera 7及以下版本
·微軟Internet Explorer 4.0及以下版本
·基于文本的瀏覽器,如Lynx和Links
·沒有可視化實現的瀏覽器
·1997年以前的瀏覽器
Ajax傳輸中文兼容性問題的解決方案
使用ajax時,采用get傳值,如果url中含有中文,我們可以發(fā)現在火狐和IE下服務器端獲得的值是不一樣的。因為火狐采用的是utf8編碼傳值,而IE采用的gb2312編碼傳值的。解決這個兼容性問題有兩個方案,具體如下:
方案1:客戶端處理。對中文進行編碼。
HTML代碼:
<script> $(function(){ $.ajax({ url:'index.php?name='+encodeURI('小明'), success:function(msg){ alert(msg); } }); }) </script>
PHP代碼:
<?php $name = urldecode($_GET['name']); echo $name; // 輸出"小明" ?>
方案2:服務器端處理。判斷字符編碼,進行轉碼。
HTML代碼:
<script> $(function(){ $.ajax({ url:'index.php?name='小明'", success:function(msg){ alert(msg); } }); }) </script>
PHP代碼:
<?php // 函數判斷是否是utf8編碼 function is_utf8($string) { return preg_match('%^(?: [\x09\x0A\x0D\x20-\x7E] | [\xC2-\xDF][\x80-\xBF] | \xE0[\xA0-\xBF][\x80-\xBF] | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} | \xED[\x80-\x9F][\x80-\xBF] | \xF0[\x90-\xBF][\x80-\xBF]{2} | [\xF1-\xF3][\x80-\xBF]{3} | \xF4[\x80-\x8F][\x80-\xBF]{2} )*$%xs', $string); } $name = $_GET['name']; if(!is_utf8($name)) { $name = iconv("gb2312", "utf8", $name); }
當然,以上情況都是基于服務器端的編碼是utf8的情況下的。
更多建議: