学习笔记-ASP第一步-使用JavaScript框架丰富你的网站1 --

1. 什么是JavaScript 框架

  通常在进行项目中的JavaScript程序开发,尤其是涉及到Ajax的程序开发时,我们会用到第三方提供的现成的代码框架。这样做的原因:

  ⑴ 现有框架对Ajax提供了更好的兼容性。

  ⑵ 现有框架实现了很多方便的函数功能。

  ⑶ 现有框架提供了更优化的用户体验的实现方式。

  ⑷ 利用现有框架可以快速开发。

  ⑸ 日后浏览器版本升级时直接升级相应框架即可。

 

2. 主流JavaScript框架介绍

  比较优秀的框架:Prototype(+script.aculo.us)、jQuery、Yui、Dojo等。

 

  2.1 Prototype 框架

    单词prototype 原意为模型,它是一个JavaScript里的关键字。

    官方网站:http://www.prototypejs.org

    Prototype 提供了对现有JavaScript 对象的扩展方式,也提供了多个用于Ajax 等操作的对象。

    script.aculo.us 是基于Prototype 的另一个框架,它可以和Prototype一起使用,从而为页面加入你需要的效果,实现页面元素的拖拽等功能。

    两者相比,Prototype 更偏重于程序编写,而script.aculo.us 更偏重页面效果的实现。

  2.2 jQuery 框架

    相比Prototype那90KB的体积来说,jQuery只有20KB大小。在jQuery中,你可以使用Ajax,还可以实现许多精美的页面效果。

    jQuery官网:http://jquery.com  

  2.3 Yui 框架

    Yui 是由Yahoo!公司的技术人员涉及并制作的一套JavaScript框架,目前广泛的应用在Yahoo!的各个网站上。

    与其他框架类似,为我们提供了相应的Ajax 和用户界面效果功能。

  2.4 Dojo 框架

    Dojo 框架相对于Prototype 和jQuery 来讲有些庞大。

    Dojo一般用于企业化开发的网页前段的脚本处理和效果展示,并且Dojo 支持强大的widget 功能,你可以自己编写widget 来实现一些特殊组件。

    Dojo 官网:http://dojotoolkit.org

 

3. 如何开始使用Prototype 框架

  ① 官网:http://www.prototypejs.org下载框架

  ② 解压后得到prototype.js 文件,将其放在网站目录下并在网页中引用此框架,则使用。

    引入代码:<script scr="prototype.js" type="text/javascript"></script>

  ③ 测试引入成功代码:

    <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>测试prototype框架</title>

    <script scr="prototype.js" type="text/javascript"></script>
    </head>

    <body>

      <script type="text/javascript">

        alert(Prototype.Version);

      </script>
    </body>
    </html>

 

    若弹出版本窗则引入正常,否则报错。

 

 4. 使用Prototype 框架简化JavaScript 编写

  补充说明:什么是DOM?

    DOM(Document Object Model 的缩写),意为“文档对象模型”。你可以将这个模型认为是一个树,上级节点包含下级节点,这个概念在XML中非常常用。与此相应的还有BOM(Browser Object Model),即“浏览器对象模型”,它可以说是在浏览器中DOM的子集。

  4.1 $() 函数 —— 获取一个DOM元素

    a. $() 函数提供了对 document.getElementById()方法的缩写($() 完全可以替代 document.getElementById())。

    b. $() 函数可以传入多个需要获得的元素名称,则该函数会返回一个包含这些元素的数组。

      实例代码:

      <body>

        <div id="main">

          this is main.

        </div>

        <div id="main1">

          this is main1.

        </div>

        <div id="main2">

          this is main2.

        </div>

        <script type="text/javascript">

          var objs = $("main","main1","main2")

          for (var i=0;i<objs.length;i++) {

            alert(objs[i].id+":"+objs[i].innerText);

          }

        </script>

      <body>

  4.2 $F() 函数 —— 获得网页上表单元素的值

    a. $F() 函数获得网页上摸个指定名称的表单元素的值($F()函数相当于document.getElementById().value方法的缩写)。

  4.3 document.getElementsByClassName() 方法 —— 获得指定CSS名称属性的对象集合 

    在JavaScript 的浏览器对象集合中,没有为我们提供通过对象的class 属性来获得对象集合的方法。Prototype 扩展了document 对象,可以通过document.getElementsByClassName() 方法来获得指定CSS 名称属性的对象集合。

     实例代码:

    <body>

      <div id="main">

        <div class="notify">选项更新成功</div>

        <div class="notify">缓存更新成功</div>

      </div>

      <script type="text/javascript">

        var objs=document.getElementsByClassName("notify");

        for(var i=0;i<objs.length;i++) {

          objs[i].innerText='通知:'+objs[i].innerText;

        }

      </script>

    </body>

   4.4 Element.hide/Element.show 方法 —— 隐藏/显示页面上的对象

    a. Element.hide 方法用于隐藏页面上某个对面。

    b. Element.show 方法用于显示页面是哪个某个对象。

    c. CSS 的显示方式(display) 不显示(none)。

    d. 实例代码:

    <body>

      <div id="main">

        <form action="" onsubmit="return chkForm()" id="frm">

          <label for="username">用户名:</label>

          <input type="text" id="username" name="username" value="" />

          <span id="error" style="display:none;">&nbsp;请输入用户名!</span>

          <br/>

          <input type="submit" value="提交" />

        </form>

      </div>

    <script type="text/javascript">

      function chkForm() {

        if($F("username")=="") {

          Element.show('error');

          return false;

        }

      }

    </script>

    </body>

  4.5 Element.toggle 方法 —— 改变对象的显示/隐藏

    a. Element.toggle 方法,可以改变对象的显示/隐藏:当某个对象显示时,隐藏它;当其隐藏时,显示它。

    b. 实例代码:

    <body>

      <div id="main">

        <form action="">

          <label for="username">用户名:</label>

          <input type="text" id="username" name="username" value="" />

          <span id="intro">&nbsp;用户名应当为5-12位的英文或者数字,并且不能喝数据库中已存在的重复!</span>

          <br/>

          <input type="button" value="显示/隐藏说明" onclick="toggle()" />

        </form>

      </div>

      <script type="text/javascript">

        function toggle() {

          Element.toggle("intro");

        }

      </script>

    </body>

 

5. 什么是Ajax

  Ajax (全称:Asynchronous JavaScript and XML),中文意思是:异步JavaScript 和XML 。

  (我们使用Prototype,很大一部分原因因为它提供了对Ajax 的简便实现方法。)

------------------------------------------------------------------------------------------

 经典访问模型 和 Ajax方式的访问模型

------------------------------------------------------------------------------------------

 

   区别:

    a. 同步时代,浏览器的处理过程和你的操作高度相关。例如在一个网站注册,提交表单如果不幸你的用户名已被占用,网站弹窗提示后,之前提交的表单信息已被清空。

    b. 异步时代,浏览器通过一个名为“XMLHTTP” 的对象帮我们做了一些工作,当你填写完毕用户名时,JavaScript 命令XMLHTTP "偷偷"地给网站一个请求,来询问你所填写的用户名是否已经被占用,若被占用,它会在页面上给你提示,告诉你,现在别提交表单,这时由于你所看到的页面并没有进行任何的刷新、提交工作,因此你所填写的其他内容是不受影响的。

 

6. 使用Prototype 框架引入Ajax功能

  (说明:即使不用Prototype,你仍然可以为你的网站加入Ajax特性,区别在于:不适用框架(包括其他框架),你的Ajax 编写将变得非常麻烦,你需要考虑不同浏览器对Ajax 所使用XMLHTTP 对象的不同支持状况等。)

   6.1 你的第一个Ajax 程序 —— 使用Ajax.Request 类

    Ajax.Request 构建一个Ajax请求(可以说是在Prototype 中Ajax 相关类中最常用的一个)。方法如下:

      var myAjax = new Ajax.Request (

        url, {                  // 目标地址

          method: 'get',            // 请求方法

          parameters: pars,           // 参数

          onComplete: showResponse     // 回调函数

        }                      // 大括号内设定Ajax对象的属性

      );

    在上面的代码中,我们创建了一个Ajax.Request 对象,并保存在变量myAjax 中。

    在创建Ajax.Request 对象时,你可以传入若干参数(包含在小括号内的内容)。

    a. 第一个参数url :请求的目标地址。

    b. 第二个参数:我们新建的Ajax.Request 对象的属性,它控制了在进行HTTP 请求时的选项。(稍后详解)

      ① method : 设定了HTTP 请求的请求方法,这里我们设定为"get"方法。

      ② parameters : 设定了请求时需要附加的参数。

      ③ onComplete : 设定了当HTTP 请求完毕后,执行哪个函数(同时可以接收传入的XMLHTTP变量,来获得请求的响应内容)。

     实例代码:

    <%

      Option Explicit

      Dim sUserName

      sUserName = Trim(Request.QueryString("name"))

      Response.Write("Hello,"+sUserName)

    %>

 

    <html>

    <head>

      <meta http-equiv="Content-Type" content="text/html;charset=gb2312" />

      <title>Prototype</title>

      <script src="js/prototype.js" type="text/javascript"></script>

    </head>

 

    <body>

      <div id="main">

        <form action="">

          <label for="username">用户名:</label>

          <input type="text" id="username" name="username" value="" /><br />

          <input type="button" value="执行 Ajax 请求" onclick="doAjax()" />

        </form>

      </div>

      <script type="text/javascript">

        function doAjax() {

          var username = $F('username');      // 获得用户名

          var url = 'helloworld.asp'           // 定义目标地址

          var pars = 'name='+username;      // 定义参数

          var myAjax = new Ajax.Request (    // 开始请求

            url, {                 // 设定目标地址

              method:'get',          // 设定请求方法

              parameters:pars,        // 设定参数

              onComplete:showResponse    // 设定回调函数

            }

          );

        }

      //回调函数

      function showResponse(originalRequest) {    // 接收参数 originalRequest(即刚才的请求对象)

        var text = originalRequest.responseText;  // 获得返回的文本

        alert(text);                  // 弹出对话框

      }

      </script>

    </body>

    </html>

 

    实际上,这不能严格的称为 Aja"x",因为我们实际上没有用到任何XML数据,只是使用XMLHTTP 对象完成请求。不过大多数情况下我们也将这种数据请求方式称为Ajax 。

  6.2 Ajax 对象的属性详解

    创建Ajax.request 类时,我们传入的第二个参数结构:

      {

        method: 'get',          // 设定请求方法

        parameters: pars,        // 设定参数

        onComplete: showResponse  // 设定回调函数

      }

    在这个结构中我们设定了Ajax对象的各个属性。

    首先,这个参数的所有内容必须包含在两个大括号内,并且是以“名称:值”的方式出现,各个属性参数之间用逗号分割(实际上创建了一个JavaScript 对象)。

    Prototype 会解析这个对象,并设定Ajax 类的相应属性,在Prototype 的Ajax 类中,有很多属性,这些属性可以应用到刚才的Ajax.request 类,也可以应用在即将讲解的Ajax.Updater中。

属性名 含义
method HTTP请求的请求方式。
parameters 附加的参数(即在GET方式请求中附加在地址中的名称=值这昂的参数对)。
asynchronous 是否为异步请求,如果为同步请求,将在请求完毕后才继续执行。
postBody 在POST 的请求方式下,传入的请求。
requestHeaders 请求时传入的HTTP 头。
onXX(事件名)

在XMLHTTP 对象进行请求时,其状态时间可能有onUninitialized、

onLoading、onLoaded、onInteractive 和onComplete 5个,

这个属性设定当发生这5种时间时触发的函数

 

  6.3 Ajax.Updater 类 —— 一个输入学号获得姓名的例子

    Ajax.Updater 类是Ajax.Request 类派生出来用于解决某类特定问题的一个类。(我们需要使用Ajax从后台页面读取某段信息,并显示在网页的某个元素,这时可用Ajax.Updater 类来完成处理。)

    实例代码:

    ① student.asp

    <%

      Option Explicit

      Dim sNumber

      Dim sName

      sNumber = trim(Request.QueryString("number"))

      sName = "hello world!"

      response.Write "Stuent NO.:" & Number & ",Name:" & sName

    %>

    

    ② cs.asp

    <body>

      <form action="">

      <div id="main">

        <label for="number">学号:</label>

        <input type="text" id="number" name="number" value="" /><br />

        <input type="button" value="执行 Ajax.Updater 请求" onclick="doAjax()" />

      </div>

      </form>

 

      <script type="text/javascript">

        function doAjax() {

          var number = $F('number');

          var continer = "studentinfo";

          var url = 'student.asp';

          var pars = 'number' + number;  // &拼接变量

          var myAjax = new Ajax.Updater (

            continer,          // 返回内容更新到哪里

            url, {           //目标地址

              method:'get',    //请求方法

              parameters:pars  //参数(传值)

            }

          );

        }

      </script>

    </body>

7. 使用script.aculo.us 效果库 —— 增强用户体验

   Prototype 是一个基础的框架,其特色在于提供了JavaScript脚本和Ajax的扩展,使得我们的编程更加简单和强壮,而并未实现页面效果和高级的Ajax控件功能,而实际应用中,我们需要一些页面效果来增强用户体验,例如高亮效果等。名为: scriptaculo.us 的框架很好的弥补了Prototype 的不足。

 

  7.1 script.aculo.us 是什么

    a. 为网站加入高亮、黄褪等几十种页面效果。

    b. 快速实现Ajax 控件,例如自动完成、即时编译等。

    c. 实现页面元素的拖动效果。

    d. 实现滑块功能。

    e. script.aculo.us 的官网 http://script.aculo.us 获得 script.aculo.us 框架的最新版。

 

  7.2 如何开始使用 script.aculo.us 效果库

    a. 和Prototype 类似,解压后是若干个js 文件。

    b. 在使用script.aculo.us 效果库之前,你需要在HTML 中引入它:

      <head>

        <title>Prototype</title>

        <script src="js/prototype.js" type="text/javascript"></script>

        <script src="js/scriptaculous.js" type="text/javascript"></script>

      </head>

      <body>

        <script type="text/javascript">

          alert(Scriptaculous.Version);

        </script>

      </body>

    d. 注意说明:

      ① 下载回来的script.aculo.us 效果库包含了若干个文件,如builder.js、effect.js 等,你需要将其全部放在一个目录中,并引入。默认情况下,你可    
      以仅引入scriptaculous.js 文件,即可实现对效果库包含的所有文件的引入。

        你也可以根据实际需求引入某个效果库,如:<script scr="js/scriptaculous.js?load=effects,builder" type="text/javascript"></script>

      ② 请确保在引入scriptaculous.js 文件之前,你已经引用了Prototype 框架的文件 prototype.js 文件,它们可以不再同一个目录中,但是你必须确

      保引入是成功的。

 

  7.3 script.aculo.us 的页面效果及其运用

    a. script.aculo.us 可以通过Effect 类来实现各种页面效果,它包含了基础特效和组合特效。

    基本特效:

      ① Opacity (透明度)

      ② Scale (尺寸)

      ③ MoveBy (位置移动)

      ④ Highlight (高亮)

      ⑤ Parallel (并行特效)

    组合特效:

      ① Appear (渐变显示)

      ② Fade (渐变隐藏)

      ③ Puff (放大透明到消失)

      ④ DropOut (向下移动到透明,直至消失)

      ⑤ Shake (左右晃动)

      ⑥ SwitchOff (模仿电视关机效果)

      ⑦ BlindDown/BlindUp (从上到下 / 从下到上的方式显示页面元素)

      ⑧ SlideDown/slideUp )(以百叶窗方式从上到下/从下到上的方式显示页面元素)

      ⑨ Pulsate (重复"页面元素逐渐隐藏,而后逐渐显示"的过程)

      ⑩ Squish (将页面元素缩小到左上角,高宽同比例缩小)

      ⑪ Fold (将页面元素缩小到左上角,先缩小高再缩小宽)

      ⑫ Grow (将页面元素的高宽从一个点逐渐放大显示)

      ⑬ Shrink (同Grow 相反)

     b. 实例代码:

  <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
      <title>测试2</title>
      <script src="js/prototype.js" type="text/javascript"></script>
      <script src="js/scriptaculous.js" type="text/javascript"></script>
    </head>

    <body>
      <div id="hello">Hello World!</div>
      <script type="text/javascript">
         new Effect.Highlight (
            'hello', {
               duration:1.0,
               startcolor:"#FFFF33",
               endcolor:"#FFFFFF"
            }
         );
      </script>
    </body>
  </html>

 

  7.4 script.aculo.us 的页面控制组件及其运用

    a. Autocompleter (自动完成)

    b. InPlaceEditor (即时编辑)

 

    c. 代码实例

      ① hle_edit.asp

    <%

      Option Explicit

      Dim rtn

      rtn = Request.QueryString("value")  // value 是InPlaceEditor 在发送数据时默认采用的参数名。

      Response.Write rtn   // 我们简化操作,不将修改保存到数据库,而是将其直接输出

    %>

      ② cs.asp

    <body>

      <div id="hello">Hello World!</div>

      <script type="text/javascript">

        newAjax.InPlaceEditor (

          "hello",

          "hld_edit.asp", {

            okText:'提交'

            ajaxOptions: {method:'get'}

          }

        );

      </script>

    </body>

     

    d. 新建Ajax.InPlaceEditor 对象,在建立这个对象时有三个参数:

      ① 标识要应用 InPlaceEditor 控件的对象名称。

      ② 服务器端的处理文件,script.aculo.us 会将编辑后的值发送到这个文件进行处理。

      ③ 一个属性对象的集合,我们设定了okText属性的值为“提交”。另一个属性ajaxOptions为在进行Ajax请求时的属性对象集合,这个集合同使用Ajax.Request 时是一样的。

      ④ 除此之外,InplaceEditor 还有很多属性,常用的如下表:

属性名 含义
okButton 在编辑模式时是否显示“确认”按钮,默认为true。
okText 编辑模式下“确认”按钮上的文字
cancelText 编辑模式下“取消”连接的文字。
savingText 在保存时显示的文字。
rows 编辑输入框的行数,默认1,若大于1,则编辑输入框会被显示为多行文本框。
callback 设定回调函数。
posted @ 2014-06-18 14:56  被盗的小偷  阅读(247)  评论(0)    收藏  举报