在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
ruby fans们看到这个类库一定感觉很亲切吧!
<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(10, 20, false); 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.Request对象和服务器通信并且得到这段XML是非常简单的事情,下面的例子展示了如何完成这个功能。<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>
<script>
你注意到Ajax.Request类的构造方法的第二个参数了吗?{method:'get', parameters:pars, onComplete:showResponse},这是一个匿名对象的真实写法,表示你传入的这个对象有一个名为method值为'get'的属性,另一个属性名为parameters包含请求http的查询字符串,和一个名为onComplete的属性指向函数showResponse。(经常写ajax的人已经想到这个onComplete是如何实现的了吧,其实就是onreadystatechange中判断xmlhttp.state==4之后调用onComplete方法了。)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> 还有一些其他的属性可以在这个对象设置,比如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对象已经把他要做的工作完美而优雅的完成了! |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论