Ajax的兼容性问题

2018-09-06 17:18 更新

要解决兼容问题首先注意以下几点:


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中,如果网络或远程服务器出现中断,会发生什么呢?实际上,存在两个主要问题;默认地,它们并没有在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()前,我可以先检查一下是否该对象正处于忙态:

              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中含有中文,我们可以发现在火狐和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的情况下的。



以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号