zoukankan      html  css  js  c++  java
  • Ajax学习笔记(二)



    二、prototype库具体解释

    1、prototype库的使用
    //导入下载好的prototype.js文件
    <script type="text/javascript" src="prototype.js"></script>
    //在自己的js中直接使用Prototype对象
    <script type="text/javascript">
    document.writeln("Prototype库的版本号是:"+Prototype.Version+"<br/>");
    document.writeln("我的库的版本号是:"+zpc.version+"<br/>"+"我的年龄:"+zpc.age+"<br/>");
    document.writeln("client是否为Chrome:"+Prototype.Browser.WebKit+"<br/>");
    alert(Prototype.K("測试字符串"));
    </script>
    2、使用$()函数和$$()函数訪问文档中的HTML元素
       $(String tagName)函数:直接获得id为tagName的HTML元素
       $(String tagName1,String tagName2):获得id为tagName1、tagName2的HTML元素数组
       $$()的參数是一个或多个合法的CSS选择器
    3、$A()函数用于将一个參数转换成数组,假设传入的參数不是一个集合,而是一个普通变量,$A()函数将返回一个空数组。而不是仅仅有一个元素的数组。
       $F()函数用于获取表单控件的值,比方input、textArea、select等元素。
       $()函数是获取HTML元素本身,而$F()函数用于获取表单控件的值,而不是表单域本身。
       能够这样说:$()函数返回的是一个HTML元素对象。而$F()函数返回的仅仅是一个字符串值。
       使用这两个函数时都应该让HTML元素的id属性和name属性保持一致(保证IE)
    4、$H()函数:将js对象转换成Hash对象。Hash类是Prototype库提供的一个类,类似于Java语言里的Map数据结构
    5、使用Try.these()函数同意传入一些列的函数作为參数,它将依次调用传入的一系列函数,找到第一个能成功返回值的函数。并将该函数的返回值作为Try.these()函数的返回值。

    假设这一系列函数都没有返回值,Try.these()将会返回undefined
       Try.these()的參数仅仅能是函数引用
    6、Prototype的json支持为Date、Object、Array、Hash、Number类添加了toJSON()方法,用于将这些对象转换成一个JSON格式的字符串
       此外,Prototype还为String类添加了例如以下三个与JSON相关的方法:
       isJSON():该方法推断指定字符串是否为合法的JSON字符串
       evalJSON([sanitize=false]):将指定的字符串转换成json对象
       toJSON():用于将字符串转换成JSON字符串
     

      例程:
    <body>
      <script type="text/javascript">
      	var date=new Date();
      	document.writeln("日期是:"+date.toLocaleString()+"<br/>");
      	document.writeln("日期相应的JSON字符串为:"+date.toJSON()+"<br/>");
      	var p={
      		name:"zpc",
      		age:25
      	};
      	//将对象转换成JSON字符串
      	document.writeln("普通对象的JSON字符串为:"+Object.toJSON(p)+"<br/>");
      	var books=["周鹏程","鸟鹏"];
      	//document.writeln("数组的JSON字符串为:"+books.toJSON()+"<br/>");
      	var hash=$H({name:'周鹏程',age:34});
      	document.writeln("Hash对象的JSON字符串为:"+hash.toJSON()+"<br/>");
      	//document.writeln("数值的JSON字符串为:"+(45).toJSON()+"<br/>");
      	var str='{"name":"zpc","gender":"male"}';
      	//将一个json格式的字符串转换成JSON对象
      	var zpc=str.evalJSON();
      	document.writeln("zpc对象的名字:"+zpc.name+"<br/>");
      	document.writeln("zpc对象的性别:"+zpc.gender+"<br/>");
      </script>
      </body>
    7、使用Element对象:该类提供了一些方法简化HTML元素的操作
    8、使用ObjectRange对象:一个ObjectRange对象代表一个范围
       例程:
      <body>
    <script type="text/javascript" src="prototype-1.6.0.3.js"></script>	
      <script type="text/javascript">
      	//直接用new创建一个ObjectRange对象
    	var range=new ObjectRange(2,9,true);//true表示不包括9
    	range.each(function(ele,index){
    		document.writeln("索引"+index+"处的值:"+ele+"<br/>")
    	});
    	//使用$R()函数创建一个ObjectRange对象
    	var ra=$R('a','g');
    	document.writeln($A(ra));
    	alert(ra.include('b'));
      </script>
      </body>
    9、使用Form.Element操作表单控件
       Form.Element专门用于操作表单控件。使用它能够激活表单控件。能够推断某个表单控件是否为空。能够清空系列表单控件
    10、使用Form操作表单。注意:Form.Element是操作指定表单控件,而Form是操作指定表单(或者表单内的所有控件)
    11、使用Hash对象
        Hash对象是一种类似于Java中Map的数据结构。它是一个Key-Value对的集合。

    Hash对象的每一个Item是包括两个元素的数组,前一个是Key后一个是Value
        借助$H函数能够将一个普通的对象转换为Hash对象。再借助Hash对象的方法能够方便的訪问该对象的所有属性和属性值
    12、使用Event来简化事件编程
     

    <body>
       <table border="1">
       <tr><td><div><input id="ok" type="button" value="click me"/></div>table的Inner</td></tr>  
       </table>
       <div id="d">e</div>
       <script type="text/javascript" src="prototype.js"></script>	
       <script type="text/javascript">
    	Event.observe("ok","click",function(event){
    		document.writeln("是否为左击事件:"+event.isLeftClick());
    		document.writeln("事件源:"+event.element().value);
    		document.writeln("近期的td元素:"+event.findElement("td").innerHTML);		
    	});
    	$("d").innerHTML="<h2>哈哈<h2>";
       </script>
      </body>
    //上面的代码不在使用原始的事件模型,而是使用基于Event提供的事件简化,这样的简化消除了事件模型的浏览器差异。

    13、使用Template
        有时我们要生成多个字串。这些字串中有大量反复内容,仅仅有少量关键部分发生变化。这时就能够借助Template对象了
    例程:
    <body>
    	<script type="text/javascript" src="prototype.js"></script>
    	<script type="text/javascript">
    	objArr = [ {
    		book : 'Hadoop教程',
    		author : "zpc"
    	}, {
    		book : 'Java教程',
    		author : '钱刚'
    	}, {
    		book : '天龙八部',
    		author : "金庸"
    	} ];
    	var template=new Template("书名是#{book},作者是#{author}.");
    	for(var i=0;i<objArr.length;i++){
    		document.writeln(template.evaluate(objArr[i]));
    	}
    	</script>
    	</body>
    14、使用Class的create()方法创建对象能够提供一些面向对象的支持
    15、两个常常使用的监听表单控件及表单的监听器
        Form.Observer(form,interval,callback):假设表单form内不论什么表单控件的值发生改变,interval秒后自己主动触发callback函数。

    该表单既能够是表单的id属性,也能够是表单本身。


       Form.Element.Observer(element,interval,callback):假设表单控件element的值发生改变,interval秒后自己主动触发callback函数。

    该element既能够是表单控件的id属性,也能够是表单控件本身。
    例程:

    	//仅仅要不论什么表单控件的值被改变就触发
    	<body>
    		<form action="#" method="post" id="test">
    		username:<input type="text" id="user" name="user"/>
    		密 码:<input type="text" id="pass" name="pass"/>	
    		</form>
    		<script type="text/javascript" src="prototype.js"></script>
    		<script type="text/javascript">
    		new Form.Observer("test",1,function(){
    		alert(this.getValue());		
    		});		
    		</script>
    	</body>
    	
    	//username输入框值改变触发
    	<body>
    		<form action="#" method="post" id="test">
    		username:<input type="text" id="user" name="user"/>
    		密 码:<input type="text" id="pass" name="pass"/>	
    		</form>
    		<script type="text/javascript" src="prototype.js"></script>
    		<script type="text/javascript">
    		new Form.Element.Observer("user",1,function(){
    		alert(this.getValue());		
    		});	
    		</script>
    	</body>
    16、Prototype库不仅提供了一系列的自己定义的类和对象,还扩展了某些JS中原有的类和对象。
    例程:扩展的document
    	<body>
    	<script type="text/javascript" src="prototype.js"></script>
    		<script type="text/javascript">
    		//为document的loaded事件绑定监听器
    		document.observe("dom:loaded",function(event){
    			$("show").innerHTML+=("页面装载完毕<br/>");
    		});
    		//为document的a:b事件绑定事件监听器
    		document.observe("a:b",function(event){
    			$("show").innerHTML+=("myEvent被触发了<br/>");
    			$("show").innerHTML+=("event.memo.book的属性值:"+event.memo.book);
    		});
    		
    		</script>
    		<input type="button" value="单击我" onclick='document.fire("a:b",{book:"Hadoop权威指南"});'/>
    		<div id="show"></div>
    	</body>
    //a:b是开发人员自己定义的“人工合成”事件。

    单击页面中的“单击我”按钮时,程序使用document.fire()方法触发a:b事件
    //使用document、Element的observe()方法为“人工合成”事件绑定监听器时,该事件的事件名称格式必须为xx:xx
    17、Prototype对Ajax的支持
    (1)使用Ajax.Request类
    例程:输入提示效果
    html页面代码:

    <body>
      	<h3>请输入您喜欢的水果</h3>
      	<div style="280px;font-size:9pt">输入apple、banana、peach能够看到明显效果</div><br/>
      	<input id="favorite" name="favorite" tyep="text" onblur="$('tips').hide();"/>
      	<div id="tips" style="160px;border:1px solid menu;background-color: #ffffcc;display: none;"></div>
    	<script type="text/javascript" src="prototype.js"></script>
    	<script type="text/javascript">
    	function searchFruit(){
    		var url="/Ajax/fruit.jsp";
    		//将favorite表单域的值转化为请求參数。形如favorite=app&color=red....
    		var params=Form.Element.serialize('favorite');
    		//alert(params);
    		//创建Ajax.Request对象,相应于发送请求
    		var myAjax=new Ajax.Request(
    		url,
    		{
    			method:'post',
    			parameters:params,
    			onComplete:showResponse,
    			asynchronous:true
    		
    		});
    	
    	}	
    	//定义回调函数
    	function showResponse(request){
    		//alert("回调函数被触发!");
    		//在tip中显示服务器的响应
    		$('tips').innerHTML=request.responseText;
    		//显示tip对象
    		$('tips').show();
    	}
    	
    	new Form.Element.Observer("favorite",1,searchFruit);
    	</script>	
      	</body>
    
    
    //JSP页面嵌入的Java代码
    <%
    	String hdchar=request.getParameter("favorite");
    	System.out.println(hdchar);
    	if("apple".startsWith(hdchar)){
    		out.println("apple");
    	}else if("banana".startsWith(hdchar)){
    		out.println("banana");
    	}else if("peach".startsWith(hdchar)){
    		out.println("peach");	
    	}else {
    		out.println("other");
    	}
    
    %>
    (2)使用Form.request()方法
       该方法会将该表单控件转换为请求參数,默认向该表单action指定的URL发送异步请求
    例程:验证用户是否合法
    html页面代码:
    <body>
    		<h3>
    			请输入username与password登录
    		</h3>
    		<form id="login" action="/Ajax/login.jsp" method="post">
    			用户名:
    			<input type="text" name="user" />
    			<br />
    			密 码:
    			<input type="password" name="pass">
    			<br />
    			<input type="button" value="验证用户" onclick="login();"/>
    			<br />
    			<div id="d"></div>
    		</form>
    		<script type="text/javascript" src="prototype.js"></script>
    		<script type="text/javascript">
    	function login() {
    		//直接使用Form的request方法发送异步请求,request方法的參数是个json数组的格式!
    		$("login").request( {
    			//指定回调函数
    				onComplete : function(request) {
    					$("d").innerHTML = request.responseText;
    				}
    			});
    	}
    </script>
    </body>
    
    jsp页面嵌入的Java代码
    <%
    String user=request.getParameter("user");
    String pass=request.getParameter("pass");
    if(user.equals("zpc")&&pass.equals("123456")){
    out.println("验证通过!");
    }else{
    out.println("没有通过验证!

    "); } %>

    (2)使用Ajax.Responders对象

    这个对象用于注冊Ajax事件监听器,该对象注冊的Ajax事件监听器无论是哪个XMLHttpRequest在发生交互。都能被自己主动触发。因而Ajax.Responders注冊的事件监听器是全局有效的,能够用于监控整个Ajax的交互过程。

    //添加了loading图片的fruit.html
    	<body>
    		<h3>
    			请输入您喜欢的水果
    		</h3>
    		<div style=" 280px; font-size: 9pt">
    			输入apple、banana、peach能够看到明显效果
    		</div>
    		<br />
    		<input id="favorite" name="favorite" tyep="text"
    			onblur="$('tips').hide();" />
    		<img alt="loading" id="loading" src="/Ajax/images/loading.gif"
    			style="display: none;  20px; height: 20px">
    		<div id="tips"
    			style=" 160px; border: 1px solid menu; background-color: #ffffcc; display: none;"></div>
    		<script type="text/javascript" src="prototype.js"></script>
    		<script type="text/javascript">
    	function searchFruit() {
    		var url = "/Ajax/fruit.jsp";
    		//将favorite表单域的值转化为请求參数,形如favorite=app&color=red....
    		var params = Form.Element.serialize('favorite');
    		//alert(params);
    		//创建Ajax.Request对象,相应于发送请求
    		var myAjax = new Ajax.Request(url, {
    			method : 'post',
    			parameters : params,
    			onComplete : showResponse,
    			asynchronous : true
    		});
    	}
    	//定义回调函数
    	function showResponse(request) {
    		//alert("回调函数被触发!

    "); //在tip中显示服务器的响应 $('tips').innerHTML = request.responseText; //显示tip对象 $('tips').show(); } //定义Ajax的全局事件处理器对象 var myGlobalHandlers = { //刚刚開始Ajax交互时触发该属性指定的函数 onCreate:function() { $("loading").show(); }, //交互完毕时触发该属性的指定函数 onComplete:function() { if (Ajax.activeRequestCount == 0) { $('loading').hide(); } }, //交互失败时触发该属性指定的函数 onFailure:function() { alert("对不起,页面载入出错!

    "); } }; //为Ajax事件绑定全局的事件处理器 Ajax.Responders.register(myGlobalHandlers); new Form.Element.Observer("favorite", 1, searchFruit); </script> </body>

    (3)使用Ajax.Updater类
      这个类是Ajax.Updater类的简化,使用该类无需使用回调函数,该类能够自己主动将server响应显示在某个容器中。

    当server响应完毕时,clienthtml页面无需使用回调函数解析server响应(当然也能够手动加入回调函数),从而进一步简化Ajax交互编程。
    (4)使用Ajax.PeriodicalUpdater类
       它是一个周期性的Ajax.Updater类,周期性地向server发送请求(当然也能够手动指定定时器对象),并将server响应在clientHTML页面的某个元素中显示出来。

  • 相关阅读:
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    数据库周刊第十七期来啦!
    一文详解MySQL中的事件调度器EVENT
    新买的Mac该如何保养?
    五步搭建自助BI平台,业务分析自给自足,不再等待!
    Oracle坏块处理常用SQL
    懒人看执行计划神器 for Oracle
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5412236.html
Copyright © 2011-2022 走看看