ajax兼容写法,Ajax的兼容性问题

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

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代码:

$(function(){

$.ajax({

url:'index.php?name='+encodeURI('小明'),

success:function(msg){

alert(msg);

}

});

})

PHP代码:<?php

$name = urldecode($_GET['name']);

echo $name; // 输出"小明"

?>

方案2:服务器端处理。判断字符编码,进行转码。

HTML代码:

$(function(){

$.ajax({

url:'index.php?name='小明'",

success:function(msg){

alert(msg);

}

});

})

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的情况下的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值