初闻AJAX是06年的春天,当时对AJAX的记忆,就是荷兰那只充满的潜力的球队。如今此AJAX就如同彼AJAX一样,令人惊艳,异步更新使得许多桌面软件的效果可以在WEB上实现,AJAX也成为了WEB2.0的主要标志。
虽然AJAX越来越流行,但是我难免不为其泼点冷水,结合自身的经验我认为目前AJAX开发有以下几个问题,这些问题将可能成为束缚其发展。
在提出问题之前,我想有必要阐述两个观点:1.异步更新的方向是正确的 2 我的评论只涉及javaScript。
目前JAVASCRIPT开发面临的最大问题就是依赖浏览器:
(一) 语法及函数依赖浏览器
以下这段代码大家应该熟悉
function makeRequest(url) {
var http_request = false;
if (window.XMLHttpRequest) { // Mozilla, Safari,...
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/xml');
// See note below about this line
}
} else if (window.ActiveXObject) { // IE
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!http_request) {
alert('Giving up :( Cannot create an XMLHTTP instance');
return false;
}
http_request.onreadystatechange = function() { alertContents(http_request); };
http_request.open('GET', url, true);
http_request.send(null);
}
这只是简单的例子,为了生成一个XMLHttpRequest对象我们要针对不同的浏览器做许多判断。
再举个简单的例子:
在IE中你可以这样访问一个元素document.all.,而如果在FireFox中执行这段脚本一定会报错的。为了保证多浏览器,我们就应该使用共有的函数document.getElementById来获得元素。
以上这种是好的情况,不同浏览器有共有的函数可以使用,但是现实中并非都是如此有时你不可避免的要使用到分支,比如在DOM中动态创建一个RADIO,就可能要这样写:
try{
var
radio = document.createElement(
"<input type='radio' name='userId' value='"
+jsonContent.userInfoList[i].id+
"'>"
);
}catch
(e)
{
var
radio = document.createElement(
"input"
);
radio.name=
"userId"
;
radio.type=
"radio"
;
radio.value=jsonContent.userInfoList[i].id;
}
Try
里的代码是为
IE
准备的,
CATCH
里的代码是为
FIREFOX
等准备的。
以上的一些例子说明了,
JAVASCRIPT
的开发依赖于浏览器。也许有些牛人可以说,我可以用共有的函数,或者有些地方就使用
TRY,CATCH
。但是我想说的是,
JAVASCRIPT
身上承担的重量大家都了解,它承载着是
WEB2.0
的发展。这是一个大问题,因为脚本代码不可能仅由几个牛人来开发,我们需要更多像我这样的新手来开发,这才能推动
AJAX
的发展。而
JAVASCRIPT
学习曲线将影响
AJAX
开发的普及。之所以造成这个问题,就是众浏览器厂商没有制定和遵循统一的标准,仅仅支持
JAVASCRIPT
但是并不一定支持它的标准。没有统一的标准那么
JAVASCRIPT
的开发就难于顺利普及,以上个人在开发中遇到的一些情况也只能不断的积累经验。
(二)
调试依赖浏览器
调试是开发中非常重要的一环我想这个大家都没有异议,以前
JAVASCRIPT
只是做一些特效和校验脚本,但是现在不仅仅是这样,
JAVASCRIPT
被赋予了更多的功能。面对复杂的业务,使用调试器将大大提高开发效率。但是遗憾的是,
JAVASCRIPT
的调试器良莠不齐,更严重的是调试器一样依赖浏览器。
IE
你可以使用
Sript Editor,FireFox
你也许就要改用
Venkman
。这意味着什么,意味着你不得不为了多浏览器支持,去学习和熟练更多的工具。
(三)
错误提示依赖浏览器
认为自己的项目开发完成,测试工作结束后不出问题是天真的想法。对于
JAVASCRIPT
开发而言,尤其天真。(牛人开发的不予讨论)你很难保证你的脚本在客户的某个浏览器上不出现错误,因此错误提示是相当重要的。但是令人遗憾的是,连这种简单的东西都依赖浏览器。
IE
的在脚本出错时,左下角会有相应的标示,同时提供一些简单的信息(出错发生的行数之类),
FireFox
在不会有明显的标示,所有信息在错误控制台可以查看,提供的信息和
IE
差不多。这里不得不提一个浏览器,
Sofari
它往往只能告诉你脚本出错了,但是并不能告诉你在第几行。如果你的客户有
Sofari
的强硬要求,同时很不巧它又报脚本出错了。恭喜你,你将坠入地狱。你可能会说把脚本放在其他浏览器上运行,看看什么错。但是很不幸的告诉你的脚本出这些问题时,在其他浏览器上往往是可以完美运行的。这时候你会发现
JAVASCRIPT
是一个多么恐怖的语言。
有耐心看到这里的读者,似乎会发现我一直提到浏览器。为什么我一直抓着浏览器不放,因为浏览器是将我们的项目展现给用户的工具,在我看来一个项目是否出色,不在于它运用到了什么技术,而取决于用户获得的体验。“客户是我的衣食父母”这是我的口头禅。项目赚钱了,并不因为
AJAX,
并不因为
FLEX
,只因为你满足了客户的需求。客户是第一驱动力,一次两次你可以要求客户只使用
IE6,
但是长此以往不是办法。现在已经不是
IE6
拥有
90%
市场的时代了(当然同样的
IE6 SP1
版和
SP2
版也有不同,曾经遇到过问题),现在国内用户用的浏览器有
:Ie5,Ie6,Ie7,FireFox,MyIe,TT
等,你没有理由叫客户换浏览器。而且随着对盗版的打击日渐严厉,
Ie7
将逐渐取代
Ie6
。举个简单的例子,客户刚买了个本子,预装了正版的
VISTA
,他会为了你的程序去装其他的浏览器?如果你的程序不支持
IE7
显然你失去了这个客户。
现在这个问题还不是非常严重,但是可以预见不久的未来,这些问题将会日益加剧。一个菜鸟能做的就是看到一些问题,如何解决,亦或只是杞人忧天还请牛人指教了。