李超

cc编程笔记本。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

ruby fans们看到这个类库一定感觉很亲切吧!

这个出色的javascript基础类库里定义的一些数据结构,命名规则已经一些方法的调用形式,很像Ruby,现在该类库不仅是实用ruby的web程序员的最爱了,连一些其他的web程序员,也在实用这个类库,下面是对该库的一些介绍和积累。

一、 实用方法:

$()方法
替代dom中的document.getElementById()

$F()方法
替代document.getElementById().value

$A()方法
将一个可枚举列表转换成一个Array对象
如:

<script>
function showOptions(){
var someNodeList = $('lstEmployees').getElementsByTagName('option');
var nodes = $A(someNodeList);
nodes.each(
function(node){
alert(node.nodeName 
+ '' + node.innerHTML);
});
}
</script>
<select id="lstEmployees" size="10" >
<option value="5">Buchanan, Steven</option>
<option value="8">Callahan, Laura</option>
<option value="1">Davolio, Nancy</option>
</select>
<input type="button" value="Show the options" onclick="showOptions();" >

$H方法
把一些对象转换成HASH对象
<script>
function testHash()
{
//let's create the object
var a = {
first: 
10,
second: 
20,
third: 
30
};
//now transform it into a hash
var h = $H(a);
alert(h.toQueryString()); 
//displays: first=10&second=20&third=30
}
</script>

$R方法
是new ObjectRange(lowBownd, upperBornd, excludeBounds)的缩写。
<script>
function demoDollar_R(){
var range = $R(1020false);
range.each(
function(value, index){
alert(value);
});
}
</script>
<input type="button" value="Sample Count" onclick="demoDollar_R();" >

Try.these方法
这个方法可以传递进去一系列的方法,Try.these调用传递进去的这些方法,直到找到一个成功执行的方法,然后返回成功执行的函数返回值。
比如xmlNode.text在一些浏览器可用,xmlNode.textContent在其他浏览器可用,这个时候就可以使用Try.these方法了
<script>
function getXmlNodeValue(xmlNode){
    
return Try.these(
        
function() {return xmlNode.text;},
        
function() {return xmlNode.textContent;)
        );
}
</script>



二、 Ajax对象
第一章里面的都是一些简单的方法,prototype.js里面还有许多的高级应用,许多人对prototype感兴趣的原因就是因为它出色稳定的完成异步交互的能力。

Ajax对象是一个预定义对象,由prototype这个包创建,为了封装和简化编写ajax功能涉及到的一些狡猾的代码,这个对象包含了一系列的封装ajax逻辑的类,我们看看其中的几个。

使用Ajax.Request类

如果不使用任何的帮助程序包,很可能编写了大量的代码来创建XMLHttpRequest对象并且异步的跟踪它的进程,然后解析出响应,然后处理它。当你的老大不让你支持多种浏览器的时候,你会感到非常幸运。。

为了支持Ajax功能,这个包定义了 Ajax.Request类。

假如有一个应用可以通过URL http://yourserver/app/get_sales?empID=1234&year=1998与服务器通信,它返回这样的xml架构
<?xml version="1.0" encoding="utf-8" ?>
<ajax-response>
<response type="object" id="productDetails">
<monthly-sales>
<employee-sales>
<employee-id>1234</employee-id>
<year-month>1998-01</year-month>
<sales>$8,115.36</sales>
</employee-sales>
<employee-sales>
<employee-id>1234</employee-id>
<year-month>1998-02</year-month>
<sales>$11,147.51</sales>
</employee-sales>
</monthly-sales>
</response>
</ajax-response>
使用Ajax.Request对象和服务器通信并且得到这段XML是非常简单的事情,下面的例子展示了如何完成这个功能。
<script>
function searchSales()
{
var empID = $F('lstEmployees');
var y = $F('lstYears');
var url = 'http://yoursever/app/get_sales';
var pars = 'empID=' + empID + '
&year=' + y;

var myAjax = new Ajax.Request(
url,
{
method: 'get',
parameters: pars,
onComplete: showResponse
});

}
function showResponse(originalRequest)
{
//put returned XML in the textarea
$('result').value = originalRequest.responseText;
}
</script>
<select id="lstEmployees" size="10" onchange="searchSales()">
<option value="5">Buchanan, Steven</option>
<option value="8">Callahan, Laura</option>
<option value="1">Davolio, Nancy</option>
</select>
<select id="lstYears" size="3" onchange="searchSales()">
<option selected="selected" value="1996">1996</option>
<option value="1997">1997</option>
<option value="1998">1998</option>
</select>
<br><textarea id=result cols=60 rows=10 ></textarea>
你注意到Ajax.Request类的构造方法的第二个参数了吗?{method:'get', parameters:pars, onComplete:showResponse},这是一个匿名对象的真实写法,表示你传入的这个对象有一个名为method值为'get'的属性,另一个属性名为parameters包含请求http的查询字符串,和一个名为onComplete的属性指向函数showResponse。(经常写ajax的人已经想到这个onComplete是如何实现的了吧,其实就是onreadystatechange中判断xmlhttp.state==4之后调用onComplete方法了。)
还有一些其他的属性可以在这个对象设置,比如asynchronous,可以设置为true或false来决定ajax对服务器的交互是异步还是同步的(默认true)

这个匿名对象类型的参数定义了ajax调用过程中的选项,在上面的例子中,第一个参数指定通过HTTP GET命令请求那个URL,传入了变量pars包含了查询字符串,Ajax.Request对象在它完成接收响应的时候将调用showResponse方法。

大家知道,在XMLHttpRequest对象对url进行请求的时候会报告进度状况,这个进度分为四个不同的阶段:Loading, Loaded, Interactive或Complete。你可以使ajax对象在任何一个阶段调用自定义方法,Complete是最常用的一个,想调用自定义的方法只需要在请求的选项参数中的名为onXXXX属性/方法中提供你自定义的方法对象。就像onComplete一样。你传入的方法将会被用一个参数调用,这个参数就是XMLHttpRequest对象自己,你可以用这个对象去得到返回的数据。

还有两个选项来处理结果就是onSuccess和onFailure,当AJAX无误的执行完后调用onSuccess,当服务端出现错误时调用onFailure。

上面的例子仅仅在onComplete中将返回的数据放到一个文本域中,没有太复杂的内容,当然你可以使用XSLT将返回的XML文档转换为HTML然后呈现,这是后续工作了,不是我们的Ajax.Request对象所要负责的事情了,我们的Ajax.Request对象已经把他要做的工作完美而优雅的完成了!

posted on 2008-04-22 15:39  coderlee  阅读(1054)  评论(0编辑  收藏  举报