信息化 频道

无线技术推动无纸化运营


 
二、纯JavaScript
就基于原型的JavaScript而言,每种JavaScipt库的差异表现在于JavaScript语法结构上。从服务器端语言换成JavaScript,如果调用JavaScript库没有语法上的变动的话,这样的任务将变得很艰巨。
在Internet上充满着各种免费的JavaScript库,而且绝大部分是开源的(因为作为脚本,开源似乎是必然的),提供各种强大的功能。就作为脚本而言,各种JavaScript库能完成各种功能,它们最主要的区别在于语法上而已。
根据Ajaxian.com 2006的调查(尽管这个调查并不十分的科学,因为它并没有总结各种流行库),JavaScript库中最主要的三大库为别是:Dojo、Yahoo!User Interface(YUI)库及Prototype。为了帮助读者更好的对各种库进行取舍,在本文中,将介绍总结这三种库的优缺点,并分别使用三种库来处理“Hello World”,并传递若干的参数至服务器(本例中的服务器为localhost),然后从服务器上下载首页。虽然这样的例子并没在多大的技术利用价值,但可以向读者展示一下使用Ajax库进行Ajax调用的基本语法。
 
1)        Dojo
Dojo是这三种库中最全面的一种库。除了三类库都能提供的Ajax功能及动画外,Dojo还为每个页面的widget提供一个抽象层,并且以开发人员所期待的服务器端语言风格展现。
Dojo不只是提供一些库,一些方法,一些功能,而且让代码更加简洁,保证你的代码只包含所需要的部分。Dojo会让你的生活更加简单,因为他替你链接了很多东西,把你的复杂项目分成一些小问题,让你的代码更简洁,更有效率,并且可以更好的重复使用。
Dojo在正常的DOM调用与Dojo调用之间提供了一个抽象层。有些已经使用DOM很久的用户对这个抽象层并不喜爱,而那些新手,他们太缺乏经验,对DOM的了解并不多,他们反而很喜欢这个抽象层。Dojo提供大量的事件系统和丰富的可定制组件,可以设计出非常美观的用户界面。
与Python相似,Dojo也采用声明式的语法,只是更加的简洁而已。下面的“Hello World”示例展示用Dojo进行Ajax调用,将参数“key=value”传递给服务器端(如localhost)
Dojo.io.bind{
         url:”http://localhost:8088/DojoTest?key=value”,
          load:function{type,data,evt}{
                  alert(‘Responded:’+data);
         },
         Error:function(type,error){
                 alert(‘Error:’+error);
         },
         Mimetype:”text/html”
};
 
2)        Yahoo! User Interface
Yahoo! User Interface Library(简称YUI)是一个使用JavaScript编写的工具和控件库。它利用DOM脚本、DHTML和Ajax来构造具有丰富交互功能的Web程序。YUI也包含几个核心的CSS文件。YUI中的所有组件已经以开源的形式发布,它们遵循BSD协议并且可以免费使用。YUI的组件/窗口框架,相比Dojo而言,要简单很多。
YUI使用声明模型来进行Ajax调用,虽然功能很强大,但也很冗长。下面用YUI库缩写的代码实现了前面用Dojo来实现的功能:
YAHOO.util.Connect.asyncRequest(
‘get’,
‘http://localhost:8088/DojoTest?key=value',
Callback
);
Var callback =
{
         Success:reponseSuccess,
         Failure:responseFailure
};
Function reponseSuccess(r)
{ alert(‘Responded:’+r.responseXML);}
Function responseFailure(r)
{ alert(‘Error:’+r.statusText);}
 
3)        Prototype
Prototype比较像Ruby的语法,因为Prototype的JavaScript代码就是使用Ruby程序生成的,并且它们的编程风格也很相似。Prototype的功能很容易吸引初学者。因为Prototype采用$来代替document.getElementById这样的写法。Prototype包含的库相对少一些,主要有script.aculo.us、Rico、Behaviour等。当然,Prototype也为Ruby on Rails提供了基于服务器端的库,这样就可以在服务器端来处理Prototype了。
对Ajax而言,Prototype提供了多种Ajax调用的方法。当然也有像上述Dojo和YUI一样的只返回数据结果的类似方法。下面的代码展示将返回的HTML结果自动的放在一个名为DivIDToPutResultIn的<DIV>中:
Var ajaxReq = new Ajax.Updater(‘DivIDToPutResultIn’,
‘http://localhost:8088/DojoTest’,
{method: ‘get’,parameters:’key=value’});
相对以往那种在服务器端产生数据,然后在客户端用JavaScript来处理并显示的方式而言,这种在服务器端生成HTML的方式非常地有优势。
 
4)        结果处理
这三种类型的库都支持采用XML和JSON来处理返回的结果(相对于XML,JSON更加易读、更便于代码的检查,同时,JSON能更友好的从服务端传递复杂的数据结构到客户端)。当然,这三种库都需要开发人员自行选择服务器端语言中的数据类型。这意味着,要么需要为服务器端语言寻找一种库,能将结果以XML/JSON的格式返回给客户端,要么开发人员自行编码来完成此工作。可喜的是JSON已经为各种服务器端语言提供了JSON serializers,并在JSON网站上免费下载。但不幸的是,为了能使它与客户端的库能协调工作,还需做一些客户化的工作。
5)        结论
Dojo和YUI都是将开发人员从底层的DOM层解放出来,提供了一个抽象层。对于喜爱此抽象层的开发人员来说,笔者建议使用Dojo。因为Dojo在很多方面都优于YUI,如性能及功能。而对于那些热衷于DOM且不喜欢这个抽象层的开发人员,笔者建议使用Prototype,因为它可以更好的巩固DOM知识,同时对一些常见的功能提供了API,能提高开发效率。从长远来看,笔者认为Prototype是最合适的。
0
相关文章