??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲?V无码成人精品区日韩,国产亚洲情侣一区二区无码AV ,久久久久亚洲精品天堂http://www.tkk7.com/aojilee/category/9963.htmlzh-cnSat, 03 Mar 2007 09:16:01 GMTSat, 03 Mar 2007 09:16:01 GMT60javadocQ在 Java 的注释上做文?http://www.tkk7.com/aojilee/articles/48994.html奥吉奥吉Tue, 30 May 2006 06:58:00 GMThttp://www.tkk7.com/aojilee/articles/48994.htmlhttp://www.tkk7.com/aojilee/comments/48994.htmlhttp://www.tkk7.com/aojilee/articles/48994.html#Feedback0http://www.tkk7.com/aojilee/comments/commentRss/48994.htmlhttp://www.tkk7.com/aojilee/services/trackbacks/48994.html 目录

  前言
  一. Java 文档?javadoc
  ? 文档注释的格?/font>
    1. 文档注释的格式化
    2. 文档注释的三部分
  ? 使用 javadoc 标记
    http://outinn.diy.myrice.com/book/javadoc/#t31
    http://outinn.diy.myrice.com/book/javadoc/#t32
    http://outinn.diy.myrice.com/book/javadoc/#t33
  ? javadoc 命o(h)


前言

  Java 的语法与 C++ ?qing)?f)怼Q那么,你知?Java 的注释有几种吗?是两U?

  // 注释一?br />  /* ...... */ 注释若干?/p>

  不完全对Q除了以上两U之外,q有W三U,文档注释Q?/p>

  /** ...... */ 注释若干行,q写?javadoc 文档

  通常q种注释的多行写法如下:(x)

  /**
   * .........
   * .........
   */

  暂停Q暂停!q第三种注释有什么用Qjavadoc 又是什么东西?

  好,那就让我告诉你—?


一. Java 文档?javadoc

  Java E序员都应该知道使用 JDK 开发,最好的帮助信息来?SUN 发布?Java 文档。它分包、分c详l的提供了各Ҏ(gu)、属性的帮助信息Q具有详l的cL(wi)信息、烦引信息等Qƈ提供了许多相关类之间的关p,如ѝ实现接口、引用等?/p>

  Java 文档全是׃?html 文gl织h的,?SUM 的站点上可以下蝲它们的压~包。但是你肯定想不刎ͼq些文档我们可以自己生成。——就此打住,再吊一ơ胃口?/p>

  安装?JDK 之后Q安装目录下有一?src.jar 文g或?src.zip 文gQ它们都是以 ZIP 格式压羃的,可以使用 WinZip 解压。解压之后,我们可以看到分目录攄全是 .java 文g。是了,q些是 Java q行cȝ源码了,非常完整Q连注释都写得一清二楚……不q,怎么看这些注释都有点似曾相识的感觉?

  q就不奇怪了Q我们的q底也快要揭开了。如果你仔细Ҏ(gu)一?.java 源文件中的文档注?(/** ... */) ?Java 文档的内容,你会(x)发现它们是一L(fng)。Java 文档只是q在格式和排版上下了些功夫。再仔细一点,你会(x)发现 .java 源文件中的注释还带有 HTML 标识Q如 <B>?lt;BR>?lt;Code> {,?Java 文档中,该出现这些标识的地方Q已l按标识的的定义q行了排版?/p>

  l于真像大白了,原来 Java 文档是来自这些注释。难怪这些注释叫做文档注释呢Q不q,是什么工hq些注释变成文档的呢Q?/p>

  是该请出 javadoc 的时候了。在 JDK ?bin 目录下你可以扑ֈ javadocQ如果是 Windows 下的 JDKQ它的文件名?javadoc.exe。?javdoc ~译 .java 源文件时Q它?x)读?.java 源文件中的文档注释,q按照一定的规则?Java 源程序一赯行编译,生成文档?/p>

  介绍 javadoc 的编译命令之前,q是先了解一下文档注释的格式吧。不qؓ(f)了能够编译下面提到的若干例子Q这里先介绍一?javadoc 命o(h)Q?/p>

  javadoc -d 文档存放目录 -author -version 源文件名.java

  q条命o(h)~译一个名?“源文g?java”的 java 源文Ӟq将生成的文档存攑֜“文档存攄录”指定的目录下,生成的文档中 index.html 是文档的首c(din)?author ?-version 两个选项可以省略?/p>


? 文档注释的格?/b>

  文档注释可以用于对类、属性、方法等q行说明。写文档注释旉了需要?/** .... */ 限定之外Q还需要注意注释内部的一些细节问题?/p>

  1. 文档和文档注释的格式?/p>

  生成的文档是 HTML 格式Q而这?HTML 格式的标识符q不?javadoc 加的Q而是我们在写注释的时候写上去的。比如,需要换行时Q不是敲入一个回车符Q而是写入 <br>Q如果要分段Q就应该在段前写?<p>?/p>

  因此Q格式化文档Q就是在文档注释中添加相应的 HTML 标识?/p>

  文档注释的正文ƈ不是直接复制到输出文?(文档?HTML 文g)Q而是d每一行后Q删掉前导的 * 号及(qing) * 号以前的I格Q再输入到文档的。如

  /**
* This is first line. <br>
***** This is second line. <br>
This is third line.
*/

  ~译输出后的 HTML 源码则是

  This is first line. <br>
This is second line. <br>
This is third line.

  前导?* 号允许连l用多个,其效果和使用一?* 号一P但多?* 号前不能有其它字W分隔,否则分隔W及(qing)后面?* 号都作为文档的内容? 号在q里是作为左边界使用Q如上例的第一行和W二行;如果没有前导?* P则边界从W一个有效字W开始,而不包括前面的空|如上例第三行?/p>

  q有一炚w要说明,文档注释只说明紧接其后的cR属性或者方法。如下例Q?/p>
 
												/** comment for class */
public class Test {

    /** comment for a attribute */
    int number;

    /** comment for a method */
    public void myMethod() { ...... }

    ......
}

  上例中的三处注释是分别对类、属性和Ҏ(gu)的文档注释。它们生成的文档分别是说明紧接其后的cR属性、方法的。“紧接”二字尤光要,如果忽略了这一点,很可能造成生成的文档错误。如

 
import java.lang.*;

/** commnet for class */

public class Test { ...... }

// 此例为正的例子

  q个文档注释生成正的文档。但只需要改变其中两行的位置Q变成下例,׃(x)出错Q?/p>
 
												/** commnet for class */

import java.lang.*;

public class Test { ...... }

// 此例为错误的例子

  q个例子只把上例?import 语句和文档注释部分交换了位置Q结果却大不相同——生成的文档中根本就找不Cq注释的内容了。原因何在?

  ?font color="#008000">/** commnet for class */”是?class Test 的说明,把它攑֜“public class Test { ...... }”之前时Q其后紧接着 class TestQ符合规则,所以生成的文档正确。但是把它和“import java.lang.*;”调换了位置后,其后紧接的就是不 class Test 了,而是一?import 语句。由于文档注释只能说明类、属性和Ҏ(gu)Qimport 语句不在此列Q所以这个文档注释就被当作错误说明省略掉了?/p>

  2. 文档注释的三部分

  Ҏ(gu)在文档中昄的效果,文档注释分ؓ(f)三部分。先举例如下Q以便说明?/p>
 
												/**
 * show Ҏ(gu)的简q?
 * <p>show Ҏ(gu)的详l说明第一?lt;br>
 * show Ҏ(gu)的详l说明第二行
 * @param b true 表示昄Qfalse 表示隐藏
 * @return 没有q回?
 */
public void show(boolean b) {
    frame.show(b);
}

  W一部分是简q。文档中Q对于属性和Ҏ(gu)都是先有一个列表,然后才在后面一个一个的详细的说明。列表中属性名或者方法名后面那段说明是q。如下图中被U框框选的部分Q?/p>

  q部分写在一D|档注释的最前面Q第一个点?(.) 之前 (包括点号)。换句话_(d)是用第一个点号分隔文档注释,之前是简qͼ之后是第二部分和W三部分。如上例中的 ? show Ҏ(gu)的简q?”?/p>

  有时Q即使正地以一个点号作为分隔,javadoc 仍然?x)出错,把点号后面的部分也做ZW一部分。ؓ(f)了解册个问题,我们可以使用一?<p> 标志第二分部分开Z一D,如上例的? <p>show Ҏ(gu)的详l说明第一?....”。除此之外,我们也可以?<br> 来分隔?/p>

  W二部分是详l说明部分。该部分对属性或者方法进行详l的说明Q在格式上没有什么特D的要求Q可以包含若q个点号。它在文档中的位|如下图所C:(x)

  q部分文档在上例中相应的代码是:(x)

  * show Ҏ(gu)的简q?
  * <p>show Ҏ(gu)的详l说明第一?lt;br>
  * show Ҏ(gu)的详l说明第二行

  发现什么了Q对了,qC在其中。这一点要C了,不要画蛇添——在详细说明部分中再写一ơ简q哦Q?/p>

  W三部分是特D说明部分。这部分包括版本说明、参数说明、返回D明等。它在文档中的位|:(x)

  W三部分在上例中相应的代码是

  * @param b true 表示昄Qfalse 表示隐藏
  * @return 没有q回?/font>

  除了 @param ?@return 之外Q还有其它的一些特D标讎ͼ分别用于对类、属性和Ҏ(gu)的说明……不要推我,我马上就说?/p>


? 使用 javadoc 标记

  javadoc 标记是插入文档注释中的特D标讎ͼ它们用于标识代码中的Ҏ(gu)引用。javadoc 标记由“@”及(qing)其后所跟的标记cd和专用注释引用组成。记住了Q三个部分——@、标记类型、专用注释引用。不q我宁愿把它分成两部分:(x)@ 和标记类型、专用注释引用。虽?@ ?标记cd之间有时可以用空格符分隔Q但是我宁愿始终它们紧挨着写,以减出错机?x)?/p>

  javadoc 标记有如下一些:(x)

标记 用于 作用
@author 对类的说?/td> 标明开发该cL块的作?/td>
@version 对类的说?/td> 标明该类模块的版?/td>
@see 对类、属性、方法的说明 参考{向,也就是相关主?/td>
@param Ҏ(gu)法的说明 Ҏ(gu)法中某参数的说明
@return Ҏ(gu)法的说明 Ҏ(gu)法返回值的说明
@exception Ҏ(gu)法的说明 Ҏ(gu)法可能抛出的异常q行说明

  下面详细说明各标记?/p>

  1. @see 的?/p>

  @see 的句法有三种Q?

  @see cd
  @see #Ҏ(gu)名或属性名
  @see cd#Ҏ(gu)名或属性名

  cdQ可以根据需要只写出cd (?String) 或者写出类全名 (?java.lang.String)。那么什么时候只需要写出类名,什么时候需要写出类全名呢?

  如果 java 源文件中?import 语句包含了的c,可以只写出类名,如果没有包含Q则需要写出类全名。java.lang 也已l默认被包含了。这?javac ~译 java 源文件时的规定一P所以可以简单的?javac ~译来判断,源程序中 javac 能找到的c,javadoc 也一定能扑ֈQjavac 找不到的c,javadoc 也找不到Q这需要用类全名了?/p>

  Ҏ(gu)名或者属性名Q如果是属性名Q则只需要写出属性名卛_Q如果是Ҏ(gu)名,则需要写出方法名以及(qing)参数cdQ没有参数的Ҏ(gu)Q需要写ZҎ(gu)受如

成员cd 成员名称?qing)参?/b> @see 句法
属?/td> number @see number
属?/td> count @see count
Ҏ(gu) count() @see count()
Ҏ(gu) show(boolean b) @see show(boolean)
Ҏ(gu) main(String[] args) @see main(String[])

  有时也可以偷懒:(x)假如上例中,没有 count q一属性,那么参考方?count() 可以简写成 @see count。不q,Z安全赯Q还是写?@see count() 比较好?/p>

  @see 的第二个句法和第三个句法都是转向Ҏ(gu)或者属性的参考,它们有什么区别呢Q?/p>

  W二个句法中没有指出cdQ则默认为当前类。所以它定义的参考,都{向本cM的属性或者方法。而第三个句法中指ZcdQ则q可以{向其它类的属性或者方法?/p>

  关于 @see 标记Q我们D个例说明。由?@see 在对c说明、对属性说明、对Ҏ(gu)说明时用法都一P所以这里只以对c说明ؓ(f)例?/p>
 
												/**
 * @see String
 * @see java.lang.StringBuffer
 * @see #str
 * @see #str()
 * @see #main(String[])
 * @see Object#toString()
 */
public class TestJavaDoc {

}

  生成的文档的相关部分如下图:(x)

  String ?StringBuffer 都是?java.lang 包中Q由于这个包是默认导入了的,所以这两个cd以直接写cdQ也可以写类全名。str、str() 为同名属性和Ҏ(gu)Q所以方法名需要用 () 区分。main 是带参数的方法,所以在 () 中指明了参数cd。toString() 虽然在本cM也有 (?Object l承?Q但我们是想参?Object cȝ toString() Ҏ(gu)Q所以用了 Object#toString()?/p>

  奇怪的是,Z么其中只?str、str() ?main(String[]) 变成了链接呢Q那是因为编译时没有?java.lang 包或?Stirng、StringBuffer、Object 三个cȝ源文件一起加入编译,所以,生成的文档没有关于那三个cȝ信息Q也׃可以建立链接了。后面讲?javadoc ~译命o(h)的时候还?x)详l说明?/p>

  上例中如果去把类中的 str 属性去掉,那么生成的文档又?x)有什么变化呢Q你?x)发玎ͼ原来?str, str()Q而现在变成了 str(), str()Q因?str 属性已l没有了Q所?str 也表C方?str()?/p>

  2. 使用 @author、@version 说明c?/p>

  q两个标记分别用于指明类的作者和版本。缺省情况下 javadoc 其忽略Q但命o(h)行开?-author ?-version 可以修改q个功能Q其包含的信息被输出。这两个标记的句法如下:(x)

  @author 作者名
  @version 版本?/font>

  其中Q@author 可以多次使用Q以指明多个作者,生成的文档中每个作者之间用逗号 (,) 隔开。@version 也可以用多ơ,只有W一ơ有效,生成的文档中只会(x)昄W一ơ?@version 指明的版本号。如下例

 
												/**
 * @author Fancy
 * @author Bird
 * @version Version 1.00
 * @version Version 2.00
 */
public class TestJavaDoc {

}

  生成文档的相关部分如图:(x)

  从生成文档的囄中可以看出,两个 @author 语句都被~译Q在文档中生成了作者列表。而两?@version 语句中只有第一句被~译了,只生成了一个版本号?/p>

  从图上看Q作者列表是以逗号分隔的,如果我想分行昄怎么办?另外Q如果我xCZ个以上的版本号又该怎么办?

  ——我们可以将上述两条 @author 语句合ؓ(f)一句,把两?@version 语句也合Z句:(x)

  @author Fancy<br>Bird
  @version Version 1.00<br>Version 2.00

  l果如图Q?/p>

  我们q样做即辑ֈ了目的,又没有破坏规则。@author 之后的作者名?@version 之后的版本号都可以是用户自己定义的Q?HTML 格式Q所以我们可以?<br> 标记其分行昄。同Ӟ在一?@version 中指明两个用 <br> 分隔的版本号Q也没有破坏只显C第一?@version 内容的规则?/p>

  3. 使用 @param、@return ?@exception 说明Ҏ(gu)

  q三个标记都是只用于Ҏ(gu)的。@param 描述Ҏ(gu)的参敎ͼ@return 描述Ҏ(gu)的返回|@exception 描述Ҏ(gu)可能抛出的异常。它们的句法如下Q?/p>

  @param 参数?参数说明
  @return q回D?br />  @exception 异常cd 说明

  每一?@param 只能描述Ҏ(gu)的一个参敎ͼ所以,如果Ҏ(gu)需要多个参敎ͼ需要多ơ?@param 来描q?/p>

  一个方法中只能用一?@returnQ如果文档说明中列了多个 @returnQ则 javadoc ~译时会(x)发出警告Q且只有W一?@return 在生成的文档中有效?/p>

  Ҏ(gu)可能抛出的异常应当用 @exception 描述。由于一个方法可能抛出多个异常,所以可以有多个 @exception。每?@exception 后面应有q的异常cdQ说明中应指出抛出异常的原因。需要注意的是,异常cd应该Ҏ(gu)源文件的 import 语句定是写出类名还是类全名?  CZ如下Q?/p>
 
public class TestJavaDoc {

    /**
     * @param n a switch
     * @param b excrescent parameter
     * @return true or false
     * @return excrescent return
     * @exception java.lang.Exception throw when switch is 1
     * @exception NullPointerException throw when parameter n is null
     */
    public boolean fun(Integer n) throws Exception {
        switch (n.intValue()) {
        case 0:
            break;
        case 1:
            throw new Exception("Test Only");
        default:
            return false;
        }
        return true;
    }

}

  使用 javadoc ~译生成的文档相关部分如下图Q?/p>

  可以看到Q上例中 @param b excrescent parameter 一句是多余的,因ؓ(f)参数只是一?nQƈ没有一?b但?javadoc ~译时ƈ没有(g)查。因此,写文档注释时一定要正确匚w参数表与Ҏ(gu)中正式参数表的项目。如果方法参数表中的参数?aQ文档中却给出对参数 x 的解释,或者再多出一个参?iQ就?x)让人摸不着头脑了。@exceptin 也是一栗?/p>

  上例E序中ƈ没有抛出一?NullPointerExceptionQ但是文档注释中Z么要写上q么一句呢Q难道又是ؓ(f)了演C?q不是ؓ(f)了演C描q多余的异常也能通过~译Q而是Z说明写异常说明时应考运行时 (RunTime) 异常的可能性。上例程序中Q如果参?n 是给的一个空?(null)Q那么程序会(x)在运行的时候抛Z?NullPointerExceptionQ因此,在文档注释中d了对 NullPointerException 的说明?/p>

  上例中的 @return 语句有两个,但是Ҏ(gu)规则Q同一个方法中Q只有第一?@return 有效Q其余的?x)?javadoc 忽略。所以生成的文档中没有出现第二个 @return 的描q?/p>

  讲到q里Q该怎么写文档注释你应该已经清楚了,下面开始讲?javadoc 的常用命令?/p>


? javadoc 命o(h)

  q行 javadoc -help 可以看到 javadoc 的用法,q里列D常用参数如下Q?/p>

用法Q?br />  javadoc [options] [packagenames] [sourcefiles]

选项Q?/p>
  -public 仅显C?public cd成员
  -protected 昄 protected/public cd成员 (~省)
  -package 昄 package/protected/public cd成员
  -private 昄所有类和成?/td>
  -d <directory> 输出文g的目标目?/td>
  -version 包含 @version D?/td>
  -author 包含 @author D?/td>
  -splitindex 烦引分为每个字母对应一个文?/td>
  -windowtitle <text> 文档的浏览器H口标题

  javadoc ~译文档时可以给定包列表Q也可以l出源程序文件列表。例如在 CLASSPATH 下有两个包若q类如下Q?/p>

  fancy.Editor
  fancy.Test
  fancy.editor.ECommand
  fancy.editor.EDocument
  fancy.editor.EView

  q里有两个包 (fancy ?fancy.editor) ?5 个类。那么编译时 (Windows 环境) 可以使用如下 javadoc 命o(h)Q?/p>

  javadoc fancy\Test.java fancy\Editor.java fancy\editor\ECommand.java fancy\editor\EDocument.java fancy\editor\EView.java

  q是l出 java 源文件作为编译参数的Ҏ(gu)Q注意命令中指出的是文g路径Q应该根据实际情冉|变。也可以是给出包名作为编译参敎ͼ如:(x)

  javadoc fancy fancy.editor

  用浏览器打开生成文档?index.html 文g卛_发现两种方式~译l果的不同,如下图:(x)

  用第二条命o(h)生成的文档被框架分成了三部分Q包列表、类列表和类说明。在包列表中选择了某个包之后Q类列表中就?x)列包中的所有类Q在cd表中选择了某个类之后Q类说明部分׃(x)昄cȝ详细文档。而用W一条命令生成的文档只有两部分,cd表和c说明,没有包列表。这是两种方式生成文档的最大区别了?/p>

  下面再来l说选项?/p>

  -public?protected?package?private 四个选项Q只需要Q选其一卛_。它们指定的昄cL员的E度。它们显C的成员多少是一个包含的关系Q如下表Q?/p>
-private (昄所有类和成?
-package (昄 package/protected/public cd成员)
-protected (昄 protected/public cd成员)
-public (仅显C?public cd成员)

  -d 选项允许你定义输出目录。如果不?-d 定义输出目录Q生成的文档文g?x)放在当前目录下?d 选项的用法是

  -d 目录?/font>

  目录名ؓ(f)必填,也就是说Q如果你使用?-d 参数Q就一定要为它指定一个目录。这个目录必dl存在了Q如果还不存在,请在q行 javadoc 之前创徏该目录?/p>

  -version ?-author 用于控制生成文档时是否生?@version ?@author 指定的内宏V不加这两个参数的情况下Q生成的文档中不包含版本和作者信息?/p>

  -splitindex 选项烦引分为每个字母对应一个文件。默认情况下Q烦引文件只有一个,且该文g中包含所有烦引内宏V当然生成文档内容不多的时候,q样做非常合适,但是Q如果文档内定w常多的时候,q个索引文g包含非常多的内容,昑־q于庞大。?-splitindex ?x)把索引文g按各索引的W一个字母进行分c,每个字母对应一个文件。这P减M一个烦引文件的负担?/p>

  -windowtitle 选项为文档指定一个标题,该标题会(x)昄在窗口的标题栏上。如果不指定该标题,而默认的文档标题为“生成的文档Q无标题Q”。该选项的用法是Q?/p>

  -windowtitle 标题

  标题是一串没有包含空格的文本Q因为空格符是用于分隔各参数的,所以不能包含空根{同 -d cMQ如果指定了 -windowtitle 选项Q则必须指定标题文本?/p>

  到此为止QJava 文档?javadoc ׃l完了。javadoc 真的能让我们?Java 注释上做文章——生成开发文档?/p>

奥吉 2006-05-30 14:58 发表评论
]]>
样式表o(h)?/title><link>http://www.tkk7.com/aojilee/articles/48991.html</link><dc:creator>奥吉</dc:creator><author>奥吉</author><pubDate>Tue, 30 May 2006 06:52:00 GMT</pubDate><guid>http://www.tkk7.com/aojilee/articles/48991.html</guid><wfw:comment>http://www.tkk7.com/aojilee/comments/48991.html</wfw:comment><comments>http://www.tkk7.com/aojilee/articles/48991.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/aojilee/comments/commentRss/48991.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/aojilee/services/trackbacks/48991.html</trackback:ping><description><![CDATA[ 从IE 4.0版开始,览器就提供了一些内|的多媒体o(h)镜特效,|页设计师们正是利用q些样式表o(h)镜的控制Q才很轻村֜做出了漂亮的|页。即使你完全不懂样式表这斚w的知识,W者相信下面要叙述的内容你也不难掌握的。但有一个前提,那就是你必须E微了解一点HTML语法知识Q最好还能知道一Ҏ(gu)兌本语a斚w的知识。考虑到各U浏览器Ҏ(gu)式表的支持方面的因素Q笔者徏议你使用IE4.0以上版本的浏览器Q这L(fng)话,你就?x)毫不费力地看到所有的Ҏ(gu)?br /><br />      一、样式表滤镜的构?br /><br />   滤镜作ؓ(f)样式表大家庭中的一员,它跟其他样式表元素的定义和应用方式当然是一L(fng)Q能够直接定义在HTML标识?lt; head >?lt; /head >只间。样式表滤镜的基本语法ؓ(f)Q?br /><br />      标记?jng)uQLQ_(d)IQԌ(x)滤镜名(属性名Q=属性|Q属性名Q=属性|Q?...Q;?br /><br />      它所表达的意思是Q在该标记范围内的内容,样式表o(h)镜将按照括号内的属性名所限定的对象,按属性值所讑֮的数D行特效处理。其中标Cؓ(f)QTQL语法中的L标记Q如QIQNQPQQ等{;滤镜名就是我们下面所涉及(qing)到的Q4Uo(h)镜名Uͼ每一Uo(h)镜它都有自己特定的属性名?qing)其属性倹{?br /><br />      例如QP { filter : alpha(opacity=80,style=1 ); }<br /><br />      以上是使用样式表o(h)镜的定义Ҏ(gu)?br /><br />      二、静态o(h)镜的U类<br /><br />      在IE4.0以上版本览器中Q支持以?4U样式表滤镜Q?br /><br />      滤镜?说明 <br /><br />      Alpha 让对象呈现渐变半透明效果<br /><br />      Blur 让对象生风Ҏ(gu)p的效果 <br /><br />      DropShadow 让对象有一个下落式的阴?<br /><br />      Glow 在对象的周围产生光晕而模p的效果 <br /><br />      Chroma 让图像中的某一颜色变成透明?<br /><br />      FlipH 让HTML对象水^转换<br /><br />      FlipV 让HTML对象垂直转换<br /><br />      Wave 让HTML对象产生水^或是垂直方向上的正u波Ş<br /><br />      Shadow 让对象生阴影效?<br /><br />      Mask 利用一个HTML对象在另一个对象上产生囑փ的遮|?br /><br />      Light 在HTML元g上放|一个光?<br /><br />      Gray 把一个彩色的图象变成灰色调图?br /><br />      Invert 让对象生照片底片的效果 <br /><br />      XRay   让对象轮廓突出显C?br /><br />   q些滤镜像是PhotoShopq一cd像处理Y件所提供的特效一P有了q些Ҏ(gu)Q你可以直接在HTML中对囄q行Ҏ(gu)处理了,而不用再用专门的囄处理软g~辑囄了。样式表滤镜不仅对图象v作用Q同时也适用于文本;在这里笔者ؓ(f)方便叙述Q暂用文本作Z子来谈谈滤镜的参数及(qing)其作用?br /><br />      三、o(h)镜的参数?qing)其作?br /><br />      Q、Alpha 滤镜<br /><br />   语法Q{FILTERQALPHA(opacity=属性|,finishopacity=属性|,style=属性|,startx=属性|,starty=属性|,finishx=属性|,finishy=属性|)}<br /><br />   作用Q该滤镜能够使对象呈现渐变半透明效果Q其效果是由括号中的各属性名?qing)其对应的属性值决定?br /><br />   参数QOpacity 属性是讄不透明的程度,用百分比表示其属性|大小是从0?00Q?表是完全透明Q?00表示完全不透明?<br /><br />   FinishOpacity 属性是一个同Opacity一起用的选择性的参数Q当同时讑֮Opacity和FinishOpacityӞ可以制作出透明渐进的效果;其属性g是从0?00Q?表是完全透明Q?00表示完全不透明?<br /><br />   Style属性是用来讄渐变风格的,当同时设定了Opacity和finishOpacity产生透明渐进Ӟ它主要是用来指定渐进的显CŞӞQ代表均匀渐进Q1代表UŞ渐进Q2代表攑ְ渐进Q3代表直角渐进?<br /><br />   StartX 属性是用来讄水^方向渐进的v始位|?<br /><br />   FinishX属性是用来讄水^方向渐进的结束位|?<br /><br />   FinishY属性是用来讄竖直方向渐进的结束位|?br /><br />   实例Q?br /><br />   < html ><br /><br />   < head ><br /><br />   < meta http-equiv="Content-Type" content="text/html; charset=gb2312" ><br /><br />   < meta name="GENERATOR" content="Microsoft FrontPage 4.0" ><br /><br />   < meta name="ProgId" content="FrontPage.Editor.Document" ><br /><br />   < title >样式表o(h)镜实?lt; /title ><br /><br />   < style ><br /><br />   < !--<br /><br />   p { color: #FF0000; font-size: 36pt; text-decoration: blink; font-weight: bold }p {filter:alpha(opacity=80,style=0,starX=2,finishX=4);}<br /><br />   -- ><br /><br />   < /style ><br /><br />   < /head ><br /><br />   < body ><br /><br />   < p >样式表o(h)镜实?lt; /p ><br /><br />   < /body ><br /><br />   < /html > <br /><br />      Q、QUQo(h)?br /><br />   语法Q{filter:blur(add=属性|,direction=属性|,strength=属性|)Q}<br /><br />   作用Q该滤镜能够使对象表CU模p的效果Q其效果是由括号中的各属性名?qing)其对应的属性值决定?br /><br />   参数Qadd属性是用来定是否在运动模p中使用原有目标Q其属性值有Q和Q两U,Q属性值意思是在模p运动中不用原有目标,大多数情况下适用于图象;Q属性g表在模糊q动中用原有目标,大多数情况下适用于文本?br /><br />   direction属性是用来表示模糊Ud时的角度Q其属性gؓ(f)Q到Q6Q度?br /><br />   strength属性是用来表示模糊Ud时的距离Q该属性g般可以Q意设|?br /><br />   实例Q?br /><br />   < html ><br /><br />   < head ><br /><br />   < meta http-equiv="Content-Type" content="text/html; charset=gb2312" ><br /><br />   < meta name="GENERATOR" content="Microsoft FrontPage 4.0" ><br /><br />   < meta name="ProgId" content="FrontPage.Editor.Document" ><br /><br />   < title >样式表o(h)镜实?lt; /title ><br /><br />   < style ><br /><br />   < !--<br /><br />   p { color: #FF0000; font-size: 36pt; text-decoration: blink; font-weight: bold }<br /><br />   p {filter:blur(add=1,direction=60,strength=2);}<br /><br />   -- ><br /><br />   < /style ><br /><br />   < /head ><br /><br />   < body ><br /><br />   < p >样式表o(h)镜实?lt; /p ><br /><br />   < /body ><br /><br />   < /html ><br /><br />      Q、DropShadow 滤镜 <br /><br />   语法Q{filter:dropshadow(color=属性|,offx=属性|,offy=属性|,positive=属性|)Q}<br /><br />   作用Q该滤镜主要是用来生重叠效果的Q其效果是由括号中的各属性名?qing)其对应的属性值来产生的?br /><br />   参数QEQLQR属性是用来讄投媄文字的颜艌Ӏ?br /><br />   offQ属性是代表投媄文字与原文字之间水^方向上的偏移量?br /><br />   offQ属性是代表投媄文字与原文字之间垂直方向上的偏移量?br /><br />   positive属性是一个布?yu)(dng)|Q或者1Q,如果为“TRUEQ非0Q”,那么׃ؓ(f)M的非透明像素建立可见的投影;如果为“FASLEQ?Q”,那么׃ؓ(f)透明的像素部分徏立透明效果?br /><br />   实例Q?br /><br />   < html ><br /><br />   < head ><br /><br />   < meta http-equiv="Content-Type" content="text/html; charset=gb2312" ><br /><br />   < meta name="GENERATOR" content="Microsoft FrontPage 4.0" ><br /><br />   < meta name="ProgId" content="FrontPage.Editor.Document" ><br /><br />   < title >样式表o(h)镜实?lt; /title ><br /><br />   < style ><br /><br />   < !--<br /><br />   p { color: #FF0000; font-size: 36pt; text-decoration: blink; font-weight: bold }<br /><br />   p {filter:dropshadow(color=#ff0080,offX=2,offY=2,positive=0);color:#00ff11}<br /><br />   -- ><br /><br />   < /style ><br /><br />   < /head ><br /><br />   < body ><br /><br />   < p >样式表o(h)镜实?lt; /p ><br /><br />   < /body ><br /><br />   < /html ><br /><script><![CDATA[ if (0!=0){ document.write("<center>"); document.write("<a href=index.asp><font face=\"Webdings\">7</font>/a>"); for(i=0;i<=0;i++){ if(i==0){ document.write(" <a href=index.asp>"+((0==i)?"<font color=red>"+(i+1)+"</font>:(i+1))+"</a>nbsp;");} else{ document.write(" <a href=index"+(i+1)+".asp>"+((0==i)?"<font color=red>"+(i+1)+"</font>:(i+1))+"</a>nbsp;"); if(0!=0)news_basic_summarize.innerHTML="<a href=index"+(0==1?"":0)+".asp><font face=\"Webdings\">7</font>上页</a>; } } document.write("<a href=index"+(0+1)+".asp><font face=\"Webdings\">8</font>/a>"); document.write("</center>); } ]]></script>   Q、Glow 滤镜<br /><br />        语法Q{filter:glow(color=属性|,strengthQ属性|)Q}<br /><br />        作用Q该滤镜能够在原对象周围产生一U类似发光的效果Q其具体效果是由括号中的各属性名?qing)其对应的属性值来产生的?br /><br />        参数QCOLOR属性是指定发光的颜艌Ӏ?br /><br />        STRENGTH则是发光强度的表玎ͼ也指光晕的厚度;其大可以从1?55之间的Q何整数来指定q个强度?br /><br />        实例Q?br /><br />   < html ><br /><br />   < head ><br /><br />   < meta http-equiv="Content-Type" content="text/html; charset=gb2312" ><br /><br />   < meta name="GENERATOR" content="Microsoft FrontPage 4.0" ><br /><br />   < meta name="ProgId" content="FrontPage.Editor.Document" ><br /><br />   < title >样式表o(h)镜实?lt; /title ><br /><br />   < style ><br /><br />   < !--<br /><br />   p { color: #FF0000; font-size: 36pt; text-decoration: blink; font-weight: bold }<br /><br />   p {filter:glow(color=#880088,strength=3);}<br /><br />   -- ><br /><br />   < /style ><br /><br />   < /head ><br /><br />   < body ><br /><br />   < p >样式表o(h)镜实?lt; /p ><br /><br />   < /body ><br /><br />   < /html ><br /><br />      Q、Chroma 滤镜<br /><br />        语法Q{filter:chroma(color=属性?Q}<br /><br />        作用Q该滤镜能够使图像中的某一颜色变成透明艌Ӏ?br /><br />        参数Q?COLOR属性用来指定要变ؓ(f)透明色的颜色Q通过该属性值的讑֮Q我们可以来qo(h)某图象中的指定颜艌Ӏ?br /><br />        实例Q?br /><br />   < html ><br /><br />   < head ><br /><br />   < meta http-equiv="Content-Type" content="text/html; charset=gb2312" ><br /><br />   < meta name="GENERATOR" content="Microsoft FrontPage 4.0" ><br /><br />   < meta name="ProgId" content="FrontPage.Editor.Document" ><br /><br />   < title >样式表o(h)镜实?lt; /title ><br /><br />   < style ><br /><br />   < !--<br /><br />   p { color: #FF0000; font-size: 36pt; text-decoration: blink; font-weight: bold }<br /><br />   p {filter:chroma(color=#0000fe)Q}<br /><br />   -- ><br /><br />   < /style ><br /><br />   < /head ><br /><br />   < body ><br /><br />   < p >样式表o(h)镜实?lt; /p ><br /><br />   < /body ><br /><br />   < /html ><br /><br />      Q、FlipH 滤镜<br /><br />        语法Q{filter:filph} <br /><br />        作用Q该滤镜能够使ᅢQ_(d)݋Q对象进行左叛_换,一般适用于图象对象?br /><br />        参数Q该滤镜没有参数?br /><br />      Q、FlipQ 滤镜<br /><br />        语法Q{filter:filpv} <br /><br />        作用Q该滤镜能够使ᅢQ_(d)݋Q对象进行上下对换,一般适用于图象对象?br /><br />        参数Q该滤镜没有参数?br /><br />      Q、Wave 滤镜<br /><br />        语法Q{filter:wave(add=属性|,freq=属性|,lightstrength=属性|,phase=属性|,strength=属性|)Q}<br /><br />        作用Q该滤镜能够使被qo(h)对象生成正u波ŞQ从而能造成一U变形觉,其具体效果是由小括号中的各属性名?qing)其对应的属性值来产生的,一般适用于图象对象?br /><br />        参数Qadd属性是一个布?yu)(dng)|它用来决定是否将原始图象加入最后的效果之中?br /><br />        freq属性是指LU的频率Q也是指定在对象上一共需要生多个完整的LUV?br /><br />        phase属性是用来讄正u波的偏移量,也就是决定L形的形状Q其属性值的取D围ؓ(f)从0刎ͼQ0度?br /><br />        lightstrength属性可以对于LU增强光q效果Q其取D围ؓ(f)??00?br /><br />        strength属性是用来军_波Ş振幅的大?br /><br />      Q、Shadow 滤镜<br /><br />        语法Q{filter:shadow(color=属性|,direction=属性|)Q}<br /><br />        作用Q该滤镜能够使对象生一U阴影效果,其具体效果是由小括号中的各属性名?qing)其对应的属性值来产生的?br /><br />        参数Qcolor属性是用来讄阴媄的颜艌Ӏ?br /><br />        direction属性是用来讄投媄的方向,取D围ؓ(f)Q度刎ͼQ0度,其中0度代表垂直向上,然后?5度ؓ(f)一个单位,该属性的默认值是向左?70度?br /><br />        实例Q?br /><br />   < html ><br /><br />   < head ><br /><br />   < meta http-equiv="Content-Type" content="text/html; charset=gb2312" ><br /><br />   < meta name="GENERATOR" content="Microsoft FrontPage 4.0" ><br /><br />   < meta name="ProgId" content="FrontPage.Editor.Document" ><br /><br />   < title >样式表o(h)镜实?lt; /title ><br /><br />   < style ><br /><br />   < !--<br /><br />   p { color: #FF0000; font-size: 36pt; text-decoration: blink; font-weight: bold }<br /><br />   p {filter:shadow(color=Q?0ff00,direction=Q?Q}<br /><br />   -- ><br /><br />   < /style ><br /><br />   < /head ><br /><br />   < body ><br /><br />   < p >样式表o(h)镜实?lt; /p ><br /><br />   < /body ><br /><br />   < /html ><br /><br />      Q0、Mask 滤镜<br /><br />        语法Q{filter:mask(color=属性?Q}<br /><br />        作用Q该滤镜能够利用一个HTML对象在另一个对象上产生囑փ的遮|?Q可以ؓ(f)对象建立一个覆盖于表面的膜Q其效果p戴者有色眼镜看物体一P一般适用于图象对象?br /><br />        参数Qcolor属性就是用来指定要被遮|的颜色?br /><br />      Q1?Light 滤镜<br /><br />        语法Q{FilterQlight?br /><br />        作用Q该滤镜能够使ᅢQ_(d)݋Q对象生一U模拟光源的投射效果。一旦ؓ(f)对象定义了light滤镜属性,那么可以调用它的方法来讄或者改变属性。light可用的方法有Q?br /><br />      MoveLight Ud光源<br /><br />      Changcolor 改变光的颜色<br /><br />      AddAmbient 加入包围的光?br /><br />      AddPoint 加入点光?br /><br />      Clear 清除所有的光源<br /><br />      AddCone 加入锥Ş光源<br /><br />      Changstrength 改变光源的强?br /><br />      可以定义光源的虚拟位|,以及(qing)通过调整X轴和Y轴的数值来控制光源焦点的位|,q可以调整光源的形式Q点光源或者锥形光源)指定光源是否模糊边界、光源的颜色、亮度等属性。如果动态的讄光源Q可能回产生一些意想不到的效果?br /><br />        参数Q该滤镜没有参数?br /><br />      Q2、Gray 滤镜<br /><br />        语法Q{filter:gray}<br /><br />        作用Q该滤镜能够使一张彩色的囄转变为灰色调图象Q一般适用于图象对象?br /><br />        参数Q该滤镜没有附带参数?br /><br />      Q3、Invert 滤镜 <br /><br />        语法Q{filter:invert}<br /><br />        作用Q该滤镜能够使图象生照片底片的效果Q一般适用于图象对象?br /><br />        参数Q该滤镜没有参数?br /><br />      Q4、Xray 滤镜 <br /><br />        语法Q{filter:xray} <br /><br />        作用Q该滤镜能够让对象反映出它的轮廓q把q些轮廓加亮昄Q一般适用于图象对象?br /><br />        参数Q该滤镜没有参数?br /><script><![CDATA[ if (0!=0){ document.write("<center>"); document.write("<a href=index.asp><font face=\"Webdings\">7</font>/a>"); for(i=0;i<=0;i++){ if(i==0){ document.write(" <a href=index.asp>"+((0==i)?"<font color=red>"+(i+1)+"</font>:(i+1))+"</a>nbsp;");} else{ document.write(" <a href=index"+(i+1)+".asp>"+((0==i)?"<font color=red>"+(i+1)+"</font>:(i+1))+"</a>nbsp;"); if(0!=0)news_basic_summarize.innerHTML="<a href=index"+(0==1?"":0)+".asp><font face=\"Webdings\">7</font>上页</a>; } } document.write("<a href=index"+(0+1)+".asp><font face=\"Webdings\">8</font>/a>"); document.write("</center>); } ]]></script><img src ="http://www.tkk7.com/aojilee/aggbug/48991.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/aojilee/" target="_blank">奥吉</a> 2006-05-30 14:52 <a href="http://www.tkk7.com/aojilee/articles/48991.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从javascript语言本n谈项目实?/title><link>http://www.tkk7.com/aojilee/articles/48895.html</link><dc:creator>奥吉</dc:creator><author>奥吉</author><pubDate>Tue, 30 May 2006 02:08:00 GMT</pubDate><guid>http://www.tkk7.com/aojilee/articles/48895.html</guid><wfw:comment>http://www.tkk7.com/aojilee/comments/48895.html</wfw:comment><comments>http://www.tkk7.com/aojilee/articles/48895.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/aojilee/comments/commentRss/48895.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/aojilee/services/trackbacks/48895.html</trackback:ping><description><![CDATA[ <strong> <font size="4">从javascript语言本n谈项目实?br clear="all" /></font> </strong> <br /> <p>      <br />随着ajax的升温,javascript来得Ch们的重视。重要的是,ajax在一定程度上带来了web软g架构上的变化Qh们把来多的功能分<br />配到客户端实玎ͼjavascript子项目规模越来越大。如何更高效的用javascriptQ如何更U学的组ljavascriptQ如何更利?br />保证目q展Q我惛_我的l验谈一Ҏ(gu)见?/p> <br /> <br /> <p> <font style="FONT-WEIGHT: bold" size="4">一?开发h员需要认真学?fn)javascript语言本n</font> <br />       ׃javascript是?a >世界上最被误解的语言</a>?<br />大部分h对javascript语法q没有全面了解过Q只是凭借看h很像c或者java的关键字按照自己的理解写javascript代码。其?br />javascript是一U很独特的语aQ和c++/java有非常大的区别,要想用javascript做大一些的目Q开发h员必老老实实的学习(fn)<br />javascript的语法。真正掌握了语法后,我们才不?x)把delete看成释放内存对象Q才不会(x)为到底参C递是g递还是引用传递而烦恹{真正理?br />了javascript的基于原型的OO方式Q才可能写出h良好架构的javascriptE序?br />       <br />《javascript权威指南》是一本最合适的书,郑重推荐。另?a >ECMA262 <br /></a>文档可以作ؓ(f)参考。网上流行的jscript手册chm版本使用h比较方便Q不q这是微软的jscript实现Q和标准的javascript略有区别Q用时应该注意上面的注脚信息。关于javascript的原型和OO,|上已经有很多文章介l了Q在此不再多说?/p> <br /> <br /> <p> <font style="FONT-WEIGHT: bold" size="4">二?良好的代码来源于良好的设?/font> <br />      <br />只有设计优良Q代码才?x)写的漂亮。现在的javascript子项目已l不是以前web目中的“边角料”和散兵游勇了,在较大的ajax目内,<br />javascript非常复杂,ajax的异步模型也和以前顺序执行的E序设计有所区别。所以徏议做javascript前首先做好设计。推荐用用?br />驱动的方式,把用例分析清楚,以便全局考虑所有可能的面交互q程Q绘出页面内一些对象之间的交互图,分析一些数据对象的状态,作出_?br />javascript设计?/p> <br /> <p> <font size="4"> <span style="FONT-WEIGHT: bold">三?使用设计模式Q复用其他领域的设计l验</span> </font> <br /> <br />       <br />如果javascript非常复杂Q可以考虑使用一些模式。我惛_部分做javascript的开发者都不是“javascriptU班”出w吧:)<br />掌握了javascript的语a本质Q就可以复用我们在其他领域的l验了。用javascript框架或者ajax框架Q用单例模式做一个全局的数<br />据缓冲池Q或者用观察者模式把界面对象和数据对象分,使用命o(h)模式实现用户的操作队列等{?/p> <br /> <p> <font style="FONT-WEIGHT: bold" size="4">四?调试代码的技?/font> <br /> <br />        javascript的代码不太好调试Q这是由于:(x)<br /><br /></p> <br /> <ul> <li>一般的开发h员对javascript语言本n不太_N。也是上面提到的? </li> <li>web目包含较多的因素,复杂性加剧。服务端脚本、模ѝhtml、js{很多环节都可能增加调试隑ֺ? </li> <li>览器存在兼Ҏ(gu)问题。有可能在一个细节问题上IE、Mozilla、opera{浏览器都有差异? </li> <li>工具的缺乏。虽然mozilla的jsdebugger非常好用Q还有bugQ比如eval时调试器有些问题Q,但是其他览器环境下调试?br />具就不怎么样了。mspȝ自带的script<br />debug工具调试本地代码q可以,直接调试|站js代码表现Ơ佳。opera除了javascript控制台外我没有找到其他调试工兗?/li> </ul> <br />       在此我推荐几个调试技巧:(x)<br /><br /><ol><li><span style="FONT-WEIGHT: bold">使用Mozilla firefox的jsdebugger插g</span>。这个我不再多说了,最l典的js调试工具。在U调试远E站点的javascript效果非常? </li><li>把问题隔,建立本地的html文g和js文gQ?span style="FONT-WEIGHT: bold">使用ms script debug调试工具</span>来调试。如果js模块比较独立Q可以用这个工L(fng)。如果写hta的项目,q个工具当然是首选了? </li><li>httpWatch q是一个ie下的插gQ非常好用,能够监视ie中的Mhttp?x)话Qƈ能够看到http?x)话的原文。可以通过q个工具了解你的E序有没有和服务器生会(x)话,参数Q返回的数据到底是什么?br /><br />  </li><li><span style="FONT-WEIGHT: bold">在网内建立用于调试的textarea</span><br /><br />可以在网内建立一个textarea来接受你惌行的js语句Q然后加一个按钮用js的eval函数执行你输入的代码?br /><br />q种方式非常适合在线调试Q网出错后写代码输出页面内的对象倹{徏议写一些dump工具函数配合使用Q效果更佟?br /><br />我非常喜Ƣ这U方式,可以随时使用开x开面内隐藏的textareaq行调试Q感觉很像给一台服务器接上了终端,然后使用shell可以做Q何事?) 函数可以在这里重新定义,可以L操作界面中的M元素Q调用Q何对象的M函数Q输ZQ何你需要的q行时刻倹{?br /><br />  </li><li><span style="FONT-WEIGHT: bold">使用异常(exception)和断a(assert)</span><br /><br />使用try{}catch(e){}l构不光可以屏蔽出错信息Q让界面更友好。我们的E序可以使用异常、抛出异常来构徏一U更好的出错处理机制?br /><br />有这样一个故事,我在使用string.localeCompare函数旉手写了这L(fng)代码Q?br /><br />var iRe = str1.localeCompare(str2);<br /><br />switch(iRe){<br /><br />0: return ....<br /><br />1: return ....<br /><br />-1:return ....<br /><br />defalut:throw "error:localeCompare return other value"<br /><br />}<br /><br />写完忘了,没想到我的同事在linux下用firefoxӞ异常被抛ZQ然后我们得知:(x)linux firefox下localeCompareq回的不只是0/1/-1,而是q回一个具体?<br /><br />q个异常抛出有效的检出了代码的不完?br /><br />    <br /><br />firefox下的异常dump后能得到较ؓ(f)详细的调用栈信息Q这一炚w常好。IE的异怿息没有这么详l?br /><br />    <br /><br />异常和断a也可以结合成Z个非常有效的调试工具?br /><br />断言(assert)是在其他语言中的一U很有效的调试工P常常以这UŞ式出玎ͼ(x)<br /><br />assert(<条g>);<br /><br />在程序处于debug状态,当条件ؓ(f)假时Q系l中止运行ƈ报告q个断言。由于断a是我们自己定义的Q所以我们可以很Ҏ(gu)的判断出出错的地方,q而找到bug所在?br /><br />javascript语言没有提供宏,也没有提供assertQ我们可以这h?br /><br />if(_is_debug) assert = function(expression , strLable){<br /><br />    if( !expression ) throw Error(strLable);<br /><br />}<br /><br />else assert = function(){};//_is_debug是一个全局变量<br /><br />q样可以实现在发?不可能的事情"的时候,让程序在调试模式下抛出异常,在发布版本中不作理会(x)?br /><br />    <br /><br />    <span style="FONT-FAMILY: monospace">可以q样输出当前栈的调用信息,弥补刚才提到的IE中异常对象没有栈信息的缺?<br /><br />function callStackInfo(){<br /><br />    </span>var s="",line="";<br /><br />var cer=arguments.callee.caller;<br /><br />while(cer){<br /><br />var sf=cer.toString();<br /><br />s+=line+sf.substring(sf.indexOf('function'),sf.indexOf('{'))+"\n";<br /><br />line=".."+line;<br /><br />cer=cer.caller;<br /><br />}<br /><br />return s;<br /><br />}</li></ol><br />      <br />本文只就javascript在web开发,特别是在ajax斚w的开发做了一些讨论,主要在于窥如何更好的用“纯javascript”。web开<br />发还有很多其他方面,比如xml和Dom{实际上和javascript息息相关Q但是本文没有涉?qing),q请见谅。欢q各位朋友就我的讨论多提意见?br /><img src ="http://www.tkk7.com/aojilee/aggbug/48895.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/aojilee/" target="_blank">奥吉</a> 2006-05-30 10:08 <a href="http://www.tkk7.com/aojilee/articles/48895.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TextField和Textarea输入框ؓ(f)I的验证http://www.tkk7.com/aojilee/articles/48345.html奥吉奥吉Fri, 26 May 2006 08:02:00 GMThttp://www.tkk7.com/aojilee/articles/48345.htmlhttp://www.tkk7.com/aojilee/comments/48345.htmlhttp://www.tkk7.com/aojilee/articles/48345.html#Feedback0http://www.tkk7.com/aojilee/comments/commentRss/48345.htmlhttp://www.tkk7.com/aojilee/services/trackbacks/48345.html对于文本输入框可能是下面q样的情?
<input type="text" name="firstname" id="tfield" onblur=
"if (this.value) {doSomething();}"
 />


而如果是文本区域,文本输入块的话就?
<textarea name="tarea" rows="20" id="question" cols="20" onblur=
"if (this.value) {doSomething();}"
>
如果输入框ؓ(f)I的?JavaScript ?x)?this.value 解析?false, 所以后面的doSomething()不?x)执行?br />JavaScript 表单中的空白字D计ؓ(f)I字W串或?amp;& 。this 关键字是指向包含事g处理属性(如:(x)blurQ?br />的表单输入框的很好而常用的Ҏ(gu)。而this.value 则返回这个文本输入框的内宏V?br />



奥吉 2006-05-26 16:02 发表评论
]]>
AJAX开发简?/title><link>http://www.tkk7.com/aojilee/articles/45057.html</link><dc:creator>奥吉</dc:creator><author>奥吉</author><pubDate>Mon, 08 May 2006 09:52:00 GMT</pubDate><guid>http://www.tkk7.com/aojilee/articles/45057.html</guid><wfw:comment>http://www.tkk7.com/aojilee/comments/45057.html</wfw:comment><comments>http://www.tkk7.com/aojilee/articles/45057.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/aojilee/comments/commentRss/45057.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/aojilee/services/trackbacks/45057.html</trackback:ping><description><![CDATA[ <p> </p> <p>AJAX开发简?br /> <br />作?br />|名<br />联络<br />柯自?br />eamoi?? educhina<br /><a href="mailto:eamoi@163.com">eamoi@163.com</a>Q技术) <a href="mailto:zcke0728@hotmail.com">zcke0728@hotmail.com</a>Q版权)</p> <p> </p> <p> </p> <p>发布记录Q?br /> <br />版本<br />日期<br />作?br />说明<br />1.0<br />2005-10-28<br />柯自?br />创徏Q第一?/p> <p> </p> <p> </p> <p> <br />链接Q?br /> <br />cd<br />|址<br />Blog<br /><a href="/eamoi/">http://www.tkk7.com/eamoi/</a><br />MSN-Space<br /><a >http://spaces.msn.com/members/eamoi/</a></p> <p> <br />OpenDoc版权说明Q?br /> <br />本文档版权归原作者所有?br /> <br />在免贏V且无Q何附加条件的前提下,可在|络媒体中自׃播?br /> </p> <p>如需部分或者全文引用,请事先征求作者意见?br /> </p> <p>如果本文Ҏ(gu)有些许帮助,表达谢意的最好方式,是将(zhn)发现的问题和文档改q意见及(qing)时反馈给作者。当Ӟ倘若有时间和能力Q能为技术群体无偿A(ch)献自q所学ؓ(f)最好的回馈?br /> </p> <p>AJAX开发简?.. 1<br /> </p> <p>一、AJAX定义... 3<br /> </p> <p>二、现状与需要解决的问题... 3<br /> </p> <p>三、ؓ(f)什么用AJAX. 4<br /> </p> <p>四、谁在用AJAX. 6<br /> </p> <p>五、用AJAX改进你的设计... 6<br /> </p> <p>例子1Q数据校?.. 7<br /> </p> <p>例子2Q按需取数据—联菜?.. 7<br /> </p> <p>例子3Q读取外部数?.. 7<br /> </p> <p>六、AJAX的缺?.. 7<br /> </p> <p>七、AJAX开?.. 8<br /> </p> <p>7.1、AJAX应用到的技?.. 8<br /> </p> <p>A、XMLHttpRequest对象... 8<br /> </p> <p>B、Javascript. 9<br /> </p> <p>C、DOM. 9<br /> </p> <p>D、XML. 9<br /> </p> <p>7.2、AJAX开发框?.. 9<br /> </p> <p>A、初始化对象q发出XMLHttpRequesth... 9<br /> </p> <p>B、指定响应处理函?.. 10<br /> </p> <p>C、发出HTTPh... 10<br /> </p> <p>D、处理服务器q回的信?.. 11<br /> </p> <p>E、一个初步的开发框?.. 11<br /> </p> <p>7.3、简单的CZ... 13<br /> </p> <p>A、数据校?.. 13<br /> </p> <p>B、联菜?.. 14<br /> </p> <p>参考文章:(x)... 16<br /> </p> <p>在用浏览器览|页的时候,当页面刷新很慢的时候,你的览器在q什么?你的屏幕内容是什么?是的Q你的浏览器在等待刷斎ͼ而你的屏q内Ҏ(gu)一片空白,而你在屏q前苦苦的等待浏览器的响应。开发h员ؓ(f)了克服这U尴的局面,不得不在每一个可能需要长旉{待响应的页面上增加一个DIVQ告诉用户“系l正在处理?zhn)的请求,L(fng)候……”?br /> </p> <p>现在Q有一U越来越行热的“老”技术,可以d改变q种H迫的局面。那是AJAX。如今,随着Gmail、Google-maps的应用和各种览器的支持QAJAX正逐渐吸引全世界的眼球?br /> <br />一、AJAX定义<br /> </p> <p>AJAXQAsynchronous JavaScript and XMLQ其实是多种技术的l合Q包括Javascript、XHTML和CSS、DOM、XML和XSTL、XMLHttpRequest。其中:(x)<br /> </p> <p>使用XHTML和CSS标准化呈玎ͼ使用DOM实现动态显C和交互Q用XML和XSTLq行数据交换与处理,使用XMLHttpRequest对象q行异步数据dQ用Javascriptl定和处理所有数据?br /> </p> <p>在AJAX提出之前Q业界对于上q技术都只是单独的用,没有l合使用Q也是由于之前的技术需求所军_的。随着应用的广泛,AJAX也成为香饽饽了?br /> <br />二、现状与需要解决的问题<br /> </p> <p>传统的Web应用采用同步交互q程Q这U情况下Q用户首先向HTTP服务器触发一个行为或h的呼求。反q来Q服务器执行某些dQ再向发求的用户q回一个HTML面。这是一U不q诏的用户体验,服务器在处理h的时候,用户多数旉处于{待的状态,屏幕内容也是一片空白。如下图Q?/p> <p> </p> <p> <br />自从采用文本作为Web传输和呈C后,我们都是采用q么一套传输方式。当负蝲比较?yu)的时候,qƈ不会(x)体现出有什么不妥。可是当负蝲比较大,响应旉要很长,1分钟?分钟……数分钟的时候,q种{待׃可忍受了。严重的Q超q响应时_(d)服务器干脆告诉你面不可用。另外,某些时候,我只是想改变面一部分的数据Q那Z么我必须重新加蝲整个面呢?Q当软g设计来讲Ih性化的时候,q么p糕的用户体验简直与q种原则背道而驰。ؓ(f)什么老是要让用户{待服务器取数据呢?臛_Q我们应该减用L(fng)待的旉。现在,除了E序设计、编码优化和服务器调优之外,q可以采用AJAX?br /> <br />三、ؓ(f)什么用AJAX<br /> </p> <p>与传l的Web应用不同QAJAX采用异步交互q程。AJAX在用户与服务器之间引入一个中间媒介,从而消除了|络交互q程中的处理—等待—处理—等待缺炏V用L(fng)览器在执行d时即装蝲了AJAX引擎。AJAX引擎用JavaScript语言~写Q通常藏在一个隐藏的框架中。它负责~译用户界面?qing)与服务器之间的交互。AJAX引擎允许用户与应用Y件之间的交互q程异步q行Q独立于用户与网l服务器间的交流。现在,可以用Javascript调用AJAX引擎来代替生一个HTTP的用户动作,内存中的数据~辑、页面导航、数据校验这些不需要重新蝲入整个页面的需求可以交lAJAX来执行?/p> <p> </p> <p> <br />使用AJAXQ可以ؓ(f)ISP、开发h员、终端用户带来可见的便捷Q?br /> </p> <p>l   减轻服务器的负担。AJAX的原则是“按需取数据”,可以最大程度的减少冗余hQ和响应Ҏ(gu)务器造成的负担?br /> </p> <p>2  无刷新更新页面,减少用户心理和实际的{待旉。特别的Q当要读取大量的数据的时候,不用像Reload那样出现白屏的情况,AJAX使用XMLHTTP对象发送请求ƈ得到服务器响应,在不重新载入整个面的情况下用Javascript操作DOM最l更新页面。所以在d数据的过E中Q用h面对的不是白屏,是原来的面内容Q也可以加一个Loading的提C框让用L(fng)道处于读取数据过E)Q只有当数据接收完毕之后才更新相应部分的内容。这U更新是瞬间的,用户几乎感觉不到?br /> </p> <p>3  带来更好的用户体验?br /> </p> <p>4  可以把以前一些服务器负担的工作{嫁到客户端,利用客户端闲|的能力来处理,减轻服务器和带宽的负担,节约I间和宽带租用成本?br /> </p> <p>5  可以调用外部数据?br /> </p> <p>6  Z标准化的q被q泛支持的技术,不需要下载插件或者小E序?br /> </p> <p>7  q一步促q页面呈现和数据的分R?br /> <br />四、谁在用AJAX<br /> </p> <p>在应用AJAX开发上面,Google当仁不让是表率。Orkut、Gmail、Google Groups、Google Maps、Google Suggest都应用了q项技术。Amazon的A9.com搜烦引擎也采用了cM的技术?br /> </p> <p>微Y也在U极开发更为完善的AJAX应用Q它卛_推出代号为Atlas的AJAX工具。Atlas的功能超了AJAX本nQ包括整合Visual Studio的调试功能。另外,新的ASP.NET控g客户端控件与服务器端代码的捆l更为简ѝAtlas客户脚本框架QAtlas Clent Script FrameworkQ也使与|页?qing)相关项目的交互更?f)便利。但Visual Studio 2005中ƈ不包含此功能?br /> </p> <p>微Y最q宣布Atlas客户脚本框架包含如下内容(详细资料误问Atlas计划|站Q:(x)<br /> </p> <p>* 一个可扩展的核心框Ӟ它添加了JavaScript功能Q如生命同时期管理、承管理、多点传送处理器和界面管理?br /> </p> <p>* 一个常见功能的基本cdQ有丰富的字W串处理、计时器和运行Q务?br /> </p> <p>* 为HTML附加动态行为的用户界面框架?br /> </p> <p>* 一l用来简化服务器q通和|络讉K的网l堆栈?br /> </p> <p>* 一l丰富的用户界面开发控Ӟ如:(x)自动完成的文本框、动d拖放?br /> </p> <p>* 处理览器脚本行为差异的览器兼容层面?br /> </p> <p>典型的,微YAJAX技术应用在MSN Space上面。很多h一直都对MS Space服务感到很奇怪,当提交回复评Z后,览器会(x)暂时停顿一下,然后在无h的情况下把我提交的评论显C出来。这个就是应用了AJAX的效果。试惻I如果d一个评论就要重新刷新整个页面,那可真费事?br /> </p> <p>目前QAJAX应用最普遍的领域是GIS-Map斚w。GIS的区域搜索强调快速响应,AJAX的特Ҏ(gu)好符合这U需求?br /> <br />五、用AJAX改进你的设计<br /> </p> <p>AJAX虽然可以实现无刷新更新页面内容,但是也不是什么地斚w可以用,主要应用在交互较多、频J读数据、数据分c良好的Web应用中。现在,让我们D两个例子Q看看如何用AJAX改进你的设计?br /> <br />例子1Q数据校?br /> </p> <p>在输入form表单内容的时候,我们通常需要确保数据的唯一性。因此,常常在页面上提供“唯一性校验”按钮,让用L(fng)击,打开一个校验小H口Q或者等form提交到服务器端,由服务器判断后在q回相应的校验信息。前者,window.open操作本来是比较耗费资源的,通常由window. showModalDialog代替Q即使这样也要弹Z个对话框Q后者,需要把整个面提交到服务器q由服务器判断校验,q个q程不仅旉长而且加重了服务器负担。而用AJAXQ这个校验请求可以由XMLHttpRequest对象发出Q整个过E不需要弹出新H口Q也不需要将整个面提交到服务器Q快速又不加重服务器负担?br /> <br />例子2Q按需取数据—联菜?br /> </p> <p>以前Qؓ(f)了避免每ơ对菜单的操作引L(fng)重蝲面Q不采用每次调用后台的方式,而是一ơ性将U联菜单的所有数据全部读取出来ƈ写入数组Q然后根据用L(fng)操作用JavaScript来控制它的子集项目的呈现Q这栯然解决了操作响应速度、不重蝲面以及(qing)避免向服务器频繁发送请求的问题Q但是如果用户不对菜单进行操作或只对菜单中的一部分q行操作的话Q那d的数据中的一部分׃(x)成ؓ(f)冗余数据而浪费用L(fng)资源Q特别是在菜单结构复杂、数据量大的情况下(比如菜单有很多、每一U菜又有上百个项目)Q这U弊端就更ؓ(f)H出?br /> </p> <p>现在应用AJAXQ在初始化页面时我们只读出它的第一U的所有数据ƈ昄Q在用户操作一U菜单其中一Ҏ(gu)Q会(x)通过Ajax向后台请求当前一U项目所属的二子菜单的所有数据,如果再l请求已l呈现的二菜单中的一Ҏ(gu)Q再向后面请求所操作二菜单对应的所有三U菜单的所有数据,以此cL……这P用什么就取什么、用多少取多少Q就不会(x)有数据的冗余和浪费,减少了数据下载总量Q而且更新面时不用重载全部内容,只更新需要更新的那部分即可,相对于后台处理ƈ重蝲的方式羃短了用户{待旉Q也把对资源的浪贚w到最低?br /> <br />例子3Q读取外部数?br /> </p> <p>AJAX可以调用外部数据Q因此,可以对一些开发的数据比如XML文档、RSS文档q行二次加工Q实现数据整合或者开发应用程序?br /> <br />六、AJAX的缺?br /> </p> <p>AJAX不是完美的技术。用AJAXQ它的一些缺陷不得不权衡一下:(x)<br /> </p> <p>l???????? AJAX大量使用了Javascript和AJAX引擎Q而这个取决于览器的支持。IE5.0?qing)以上、Mozilla1.0、NetScape7?qing)以上版本才支持QMozilla虽然也支持AJAXQ但是提供XMLHttpRequest的方式不一栗所以,使用AJAX的程序必L试针对各个浏览器的兼Ҏ(gu)?br /> </p> <p>l???????? AJAX更新面内容的时候ƈ没有h整个面Q因此,|页的后退功能是失效的Q有的用戯l常搞不清楚现在的数据是旧的q是已经更新q的。这个就需要在明显位置提醒用户“数据已更新”?br /> </p> <p>l???????? Ҏ(gu)媒体的支持没有FLASH、Java Applet好?br /> </p> <p>l???????? 一些手持设备(如手机、PDA{)现在q不能很好的支持Ajax?br /> <br />七、AJAX开?br /> </p> <p>到这里,已经可以清楚的知道AJAX是什么,AJAX能做什么,AJAX什么地方不好。如果你觉得AJAX真的能给你的开发工作带来改q的话,那么l箋看看怎么使用AJAX吧?br /> <br />7.1、AJAX应用到的技?br /> </p> <p>AJAX涉及(qing)到的7Ҏ(gu)术中Q个为Javascript、XMLHttpRequest、DOM、XML比较有用?br /> <br />A、XMLHttpRequest对象<br /> </p> <p>XMLHttpRequest是XMLHTTPlg的对象,通过q个对象QAJAX可以像桌面应用程序一样只同服务器q行数据层面的交换,而不用每ơ都h界面Q也不用每次数据处理的工作都交l服务器来做Q这h减轻了服务器负担又加快了响应速度、羃短了用户{待的时间?br /> </p> <p>IE5.0开始,开发h员可以在Web面内部使用XMLHTTP ActiveXlg扩展自n的功能,不用从当前的Web面D可以直接传输数据到服务器或者从服务器接收数据?Mozilla1.0以及(qing)NetScape7则是创徏l承XML的代理类XMLHttpRequestQ对于大多数情况QXMLHttpRequest对象和XMLHTTPlg很相|Ҏ(gu)和属性类|只是部分属性不同?br /> </p> <p>XMLHttpRequest对象初始化:(x)<br /> </p> <p> </p> <p> <br />XMLHttpRequest对象的方法:(x)<br /> </p> <p> </p> <p> <br />Ҏ(gu)</p> <p> <br />描述</p> <p> <br />abort()</p> <p> <br />停止当前h</p> <p> <br />getAllResponseHeaders()</p> <p> <br />作ؓ(f)字符串返回完整的headers</p> <p> <br />getResponseHeader("headerLabel")</p> <p> <br />作ؓ(f)字符串返回单个的header标签</p> <p> <br />open("method","URL"[,asyncFlag[,"userName"[, "password"]]])</p> <p> <br />讄未决的请求的目标 URLQ方法,和其他参?/p> <p> <br />send(content)</p> <p> <br />发送请?/p> <p> <br />setRequestHeader("label", "value")</p> <p> <br />讄headerq和h一起发?/p> <p> </p> <p>XMLHttpRequest对象的属性:(x)<br /> </p> <p> </p> <p> <br />属?/p> <p> <br />描述</p> <p> <br />onreadystatechange</p> <p> <br />状态改变的事g触发?/p> <p> <br />readyState</p> <p> <br />对象状?integer):<br /> </p> <p>0 = 未初始化<br /> </p> <p>1 = d?br /> </p> <p>2 = 已读?br /> </p> <p>3 = 交互?br /> </p> <p>4 = 完成</p> <p> <br />responseText</p> <p> <br />服务器进E返回数据的文本版本</p> <p> <br />responseXML</p> <p> <br />服务器进E返回数据的兼容DOM的XML文档对象</p> <p> <br />status</p> <p> <br />服务器返回的状态码, 如:(x)404 = "文g未找? ?00 ="成功"</p> <p> <br />statusText</p> <p> <br />服务器返回的状态文本信?/p> <p> <br />B、Javascript<br /> </p> <p>Javascript一直被定位为客L(fng)的脚本语aQ应用最多的地方是表单数据的校验。现在,可以通过Javascript操作XMLHttpRequestQ来跟数据库打交道?br /> <br />C、DOM<br /> </p> <p>DOMQDocument Object ModelQ是提供lHTML和XML使用的一lAPIQ提供了文g的表q结构,q可以利用它改变其中的内容和可见物。脚本语a通过DOM才可以跟面q行交互。Web开发h员可操作?qing)徏立文件的属性、方法以?qing)事仉以对象来展现。比如,document׃表页面对象本w?br /> <br />D、XML<br /> </p> <p>通过XMLQExtensible Markup LanguageQ,可以规范的定义结构化数据Q是|上传输的数据和文档W合l一的标准。用XML表述的数据和文档Q可以很Ҏ(gu)的让所有程序共享?br /> <br />7.2、AJAX开发框?br /> </p> <p>q里Q我们通过一步步的解析,来Ş成一个发送和接收XMLHttpRequesth的程序框架。AJAX实质上也是遵循Request/Server模式Q所以这个框架基本的程也是Q对象初始化à发送请求à服务器接收à服务器返回à客L(fng)接收à修改客户端页面内宏V只不过q个q程是异步的?br /> <br />A、初始化对象q发出XMLHttpRequesth<br /> </p> <p>Z让Javascript可以向服务器发送HTTPhQ必M用XMLHttpRequest对象。用之前,要先XMLHttpRequest对象实例化。之前说q,各个览器对q个实例化过E实C同。IE以ActiveX控g的Ş式提供,而Mozilla{浏览器则直接以XMLHttpRequestcȝ形式提供。ؓ(f)了让~写的程序能够跨览器运行,要这样写Q?/p> <p> </p> <p>if (window.XMLHttpRequest) { // Mozilla, Safari, ...<br /> </p> <p>??? http_request = new XMLHttpRequest();<br /> </p> <p>} else if (window.ActiveXObject) { // IE<br /> </p> <p>??? http_request = new ActiveXObject("Microsoft.XMLHTTP");<br /> </p> <p>}<br /> </p> <p>有些版本的Mozilla览器处理服务器q回的未包含XML mime-type头部信息的内Ҏ(gu)?x)出错。因此,要确保返回的内容包含text/xml信息?/p> <p> </p> <p>http_request = new XMLHttpRequest();<br /> </p> <p>http_request.overrideMimeType('text/xml');<br /> <br />B、指定响应处理函?br /> </p> <p>接下来要指定当服务器q回信息时客L(fng)的处理方式。只要将相应的处理函数名U赋lXMLHttpRequest对象的onreadystatechange属性就可以了。比如:(x)</p> <p> </p> <p>http_request.onreadystatechange = processRequest;</p> <p> </p> <p>需要指出的Ӟq个函数名称不加括号Q不指定参数。也可以用Javascriptx定义函数的方式定义响应函数。比如:(x)</p> <p> </p> <p>http_request.onreadystatechange = function() {<br /> </p> <p>};<br /> <br />C、发出HTTPh<br /> </p> <p>指定响应处理函数之后Q就可以向服务器发出HTTPh了。这一步调用XMLHttpRequest对象的open和sendҎ(gu)?/p> <p> </p> <p>http_request.open('GET', 'http://www.example.org/some.file', true);<br /> </p> <p>http_request.send(null);<br /> </p> <p>open的第一个参数是HTTPh的方法,为Get、Post或者Head?br /> </p> <p>W二个参数是目标URL。基于安全考虑Q这个URL只能是同|域的,否则?x)提C“没有权限”的错误。这个URL可以是Q何的URLQ包括需要服务器解释执行的页面,不仅仅是静态页面?br /> </p> <p>W三个参数只是指定在{待服务器返回信息的旉内是否l执行下面的代码。如果ؓ(f)TrueQ则不会(x)l箋执行Q直到服务器q回信息。默认ؓ(f)True?br /> </p> <p>按照序Qopen调用完毕之后要调用sendҎ(gu)。send的参数如果是以Post方式发出的话Q可以是M想传l服务器的内宏V不q,跟form一P如果要传文gl服务器Q必d调用setRequestHeaderҎ(gu)Q修改MIMEcd。如下:(x)<br /> </p> <p>http_request.setRequestHeader(“Content-Type?”application/x-www-form-urlencoded?;</p> <p> <br />D、处理服务器q回的信?br /> </p> <p>在第二步我们已经指定了响应处理函敎ͼq一步,来看看这个响应处理函数都应该做什么?br /> </p> <p>首先Q它要检查XMLHttpRequest对象的readyState|判断h目前的状态。参照前文的属性表可以知道QreadyStategؓ(f)4的时候,代表服务器已l传回所有的信息Q可以开始处理信息ƈ更新面内容了。如下:(x)<br /> </p> <p>if (http_request.readyState == 4) {<br /> </p> <p>??? // 信息已经q回Q可以开始处?br /> </p> <p>} else {<br /> </p> <p>??? // 信息q没有返回,{待<br /> </p> <p>}<br /> </p> <p>服务器返回信息后Q还需要判断返回的HTTP状态码Q确定返回的面没有错误。所有的状态码都可以在W3C的官方网站上查到。其中,200代表面正常?/p> <p> </p> <p>if (http_request.status == 200) {<br /> </p> <p>??? // 面正常Q可以开始处理信?br /> </p> <p>} else {<br /> </p> <p>??? // 面有问?br /> </p> <p>}<br /> </p> <p>XMLHttpRequestҎ(gu)功返回的信息有两U处理方式:(x)<br /> </p> <p>responseTextQ将传回的信息当字符串用;<br /> </p> <p>responseXMLQ将传回的信息当XML文档使用Q可以用DOM处理?br /> <br />E、一个初步的开发框?br /> </p> <p>ȝ上面的步骤,我们整理Z个初步的可用的开发框Ӟ供以后调用;q里Q将服务器返回的信息用window.alert以字W串的Ş式显C出来:(x)</p> <p> </p> <p><script language="javascript"><br /> </p> <p>?????? var http_request = false;<br /> </p> <p>?????? function send_request(url) {//初始化、指定处理函数、发送请求的函数<br /> </p> <p>????????????? http_request = false;<br /> </p> <p>????????????? //开始初始化XMLHttpRequest对象<br /> </p> <p>????????????? if(window.XMLHttpRequest) { //Mozilla 览?br /> </p> <p>???????????????????? http_request = new XMLHttpRequest();<br /> </p> <p>???????????????????? if (http_request.overrideMimeType) {//讄MiMEcd<br /> </p> <p>??????????????????????????? http_request.overrideMimeType("text/xml");<br /> </p> <p>???????????????????? }<br /> </p> <p>????????????? }<br /> </p> <p>????????????? else if (window.ActiveXObject) { // IE览?br /> </p> <p>???????????????????? try {<br /> </p> <p>??????????????????????????? http_request = new ActiveXObject("Msxml2.XMLHTTP");<br /> </p> <p>???????????????????? } catch (e) {<br /> </p> <p>??????????????????????????? try {<br /> </p> <p>?????????????????????????????????? http_request = new ActiveXObject("Microsoft.XMLHTTP");<br /> </p> <p>??????????????????????????? } catch (e) {}<br /> </p> <p>???????????????????? }<br /> </p> <p>????????????? }<br /> </p> <p>????????????? if (!http_request) { // 异常Q创建对象实例失?br /> </p> <p>???????????????????? window.alert("不能创徏XMLHttpRequest对象实例.");<br /> </p> <p>???????????????????? return false;<br /> </p> <p>????????????? }<br /> </p> <p>????????????? http_request.onreadystatechange = processRequest;<br /> </p> <p>????????????? // 定发送请求的方式和URL以及(qing)是否同步执行下段代码<br /> </p> <p>????????????? http_request.open("GET", url, true);<br /> </p> <p>????????????? http_request.send(null);<br /> </p> <p>?????? }<br /> </p> <p>?????? // 处理q回信息的函?br /> </p> <p>??? function processRequest() {<br /> </p> <p>??????? if (http_request.readyState == 4) { // 判断对象状?br /> </p> <p>??????????? if (http_request.status == 200) { // 信息已经成功q回Q开始处理信?br /> </p> <p>??????????????? alert(http_request.responseText);<br /> </p> <p>??????????? } else { //面不正?br /> </p> <p>??????????????? alert("(zhn)所h的页面有异常?);<br /> </p> <p>??????????? }<br /> </p> <p>??????? }<br /> </p> <p>??? }<br /> </p> <p></script><br /> </p> <p> </p> <p> </p> <p> <br />7.3、简单的CZ<br /> </p> <p>接下来,我们利用上面的开发框架来做两个简单的应用?br /> <br />A、数据校?br /> </p> <p>在用h册的表单中,l常到要检验待注册的用户名是否唯一。传l的做法是采用window.open的弹出窗口,或者window. showModalDialog的对话框。不q,q两个都需要打开H口。采用AJAX后,采用异步方式直接参数提交到服务器,用window.alert服务器q回的校验信息显C出来。代码如下:(x)<br /> </p> <p>在之间增加一Dform表单代码Q?/p> <p>在开发框架的基础上再增加一个调用函敎ͼ(x)</p> <p> </p> <p>function userCheck() {<br /> </p> <p>?????? var f = document.form1;<br /> </p> <p>?????? var username = f.username.value;<br /> </p> <p>?????? if(username=="") {<br /> </p> <p>????????????? window.alert("用户名不能ؓ(f)I?);<br /> </p> <p>????????????? f.username.focus();<br /> </p> <p>????????????? return false;<br /> </p> <p>?????? }<br /> </p> <p>?????? else {<br /> </p> <p>????????????? send_request('sample1_2.jsp?username='+username);<br /> </p> <p>?????? }<br /> </p> <p>}<br /> </p> <p>看看sample1_2.jsp做了什么:(x)</p> <p> </p> <p><%@ page contentType="text/html; charset=gb2312" errorPage="" %><br /> </p> <p><%<br /> </p> <p>String username = request.getParameter("username");<br /> </p> <p>if("educhina".equals(username)) out.print("用户名已l被注册Q请更换一个用户名?);<br /> </p> <p>else out.print("用户名尚未被使用Q?zhn)可以l箋?);<br /> </p> <p>%></p> <p> </p> <p>q行一下,嗯,没有弹出H口Q没有页面刷斎ͼ跟预想的效果一栗如果需要的话,可以在sample1_2.jsp中实现更复杂的功能。最后,只要反馈信息打印出来就可以了?br /> </p> <p> </p> <p> <br />B、联菜?br /> </p> <p>我们在第五部分提到利用AJAX改进U联菜单的设计。接下来Q我们就演示一下如何“按需取数据”?br /> </p> <p>首先Q在<body></body>中间增加如下HTML代码Q?br /> </p> <p><table width="200" border="0" cellspacing="0" cellpadding="0"><br /> </p> <p>??? <tr><br /> </p> <p>??????? <td height="20"><br /> </p> <p>???????????????????? <a href="javascript:void(0)" onClick="showRoles('pos_1')">l理?lt;/a><br /> </p> <p>????????????? </td><br /> </p> <p>??? </tr><br /> </p> <p>??? <tr style="display:none"><br /> </p> <p>??????? <td height="20" id="pos_1">&nbsp;</td><br /> </p> <p>??? </tr><br /> </p> <p>??? <tr><br /> </p> <p>??????? <td height="20"><br /> </p> <p>???????????????????? <a href="javascript:void(0)" onClick="showRoles('pos_2')">开发部</a><br /> </p> <p>????????????? </td><br /> </p> <p>??? </tr><br /> </p> <p>??? <tr style="display:none "><br /> </p> <p>??????? <td id="pos_2" height="20">&nbsp;</td><br /> </p> <p>??? </tr><br /> </p> <p></table><br /> </p> <p>在框架的基础上增加一个响应函数showRoles(obj)Q?br /> </p> <p>//昄部门下的岗位<br /> </p> <p>function showRoles(obj) {<br /> </p> <p>?????? document.getElementById(obj).parentNode.style.display = "";<br /> </p> <p>?????? document.getElementById(obj).innerHTML = "正在d数据..."<br /> </p> <p>?????? currentPos = obj;<br /> </p> <p>?????? send_request("sample2_2.jsp?playPos="+obj);<br /> </p> <p>}<br /> </p> <p>修改框架的processRequest函数Q?br /> </p> <p>// 处理q回信息的函?br /> </p> <p>function processRequest() {<br /> </p> <p>? if (http_request.readyState == 4) { // 判断对象状?br /> </p> <p>??? if (http_request.status == 200) { // 信息已经成功q回Q开始处理信?br /> </p> <p>?????? document.getElementById(currentPos).innerHTML = http_request.responseText;<br /> </p> <p>??? } else { //面不正?br /> </p> <p>????? alert("(zhn)所h的页面有异常?);<br /> </p> <p>??? }<br /> </p> <p>? }<br /> </p> <p>}<br /> </p> <p>最后就是smaple2_2.jsp了:(x)<br /> </p> <p><%@ page contentType="text/html; charset=gb2312" errorPage="" %><br /> </p> <p><%<br /> </p> <p>String playPos = request.getParameter("playPos");<br /> </p> <p>if("pos_1".equals(playPos)) </p> <p> <br />out.print("&nbsp;&nbsp;ȝ?lt;br>&nbsp;&nbsp;副ȝ?);<br /> </p> <p>else if("pos_2".equals(playPos)) </p> <p> <br />out.println("&nbsp;&nbsp;dE师<br>&nbsp;&nbsp;软g工程?);<br /> </p> <p>%><br />q行一下看看效果:(x)</p> <p> </p> <p>参考文章:(x)<br /> </p> <p> </p> <p> <br />作者:(x)</p> <p> <br />fanscial</p> <p> <br />标题Q?/p> <p> <br />《AJAX介?/p> <p> <br />|址Q?/p> <p> <br /> <a href="/fanscial/archive/2005/08/31/11628.html">http://www.tkk7.com/fanscial/archive/2005/08/31/11628.html</a> </p> <p> </p> <p> <br />作者:(x)</p> <p> <br />Amour GUO</p> <p> <br />标题Q?/p> <p> <br />《AJAX内部交流文档?/p> <p> <br />|址Q?/p> <p> <br /> <a >http://www.dragonson.com/doc/ajax.html</a> </p> <p> </p> <p> <br />作者:(x)</p> <p> <br />MoztwWiki</p> <p> <br />标题Q?/p> <p> <br />《AJAX上手?/p> <p> <br />|址Q?/p> <p> <br /> <a >http://wiki.moztw.org/index.php/AJAX_%E4%B8%8A%E6%89%8B%E7%AF%87</a> </p> <p> </p> <p> <br /> </p> <img src ="http://www.tkk7.com/aojilee/aggbug/45057.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/aojilee/" target="_blank">奥吉</a> 2006-05-08 17:52 <a href="http://www.tkk7.com/aojilee/articles/45057.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于ajax的徏?/title><link>http://www.tkk7.com/aojilee/articles/45055.html</link><dc:creator>奥吉</dc:creator><author>奥吉</author><pubDate>Mon, 08 May 2006 09:50:00 GMT</pubDate><guid>http://www.tkk7.com/aojilee/articles/45055.html</guid><wfw:comment>http://www.tkk7.com/aojilee/comments/45055.html</wfw:comment><comments>http://www.tkk7.com/aojilee/articles/45055.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/aojilee/comments/commentRss/45055.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/aojilee/services/trackbacks/45055.html</trackback:ping><description><![CDATA[ <p>1 坚持通过xmlhttp调用Q不要用xmldom调用。IE5的xmldom有一些已知的bug是无法解决的?br /> <br />2  坚持通过异步调用Q不要同步调用。否则页面会(x)堵塞在每个调用上Q浏览器?x)常常失d应?/p> <p>3  坚持通过Uxml方式传递数据,不要通过普通文本方式传递html或者javascript代码。降低cgi和页面的耦合性,q样相同的一个xml数据才能很容易的使用在各U不同的面上。google在这斚wq不是一个好的榜栗?br /> <br />4  通过一致性的接口调用Q不要在代码里面随处创徏控g发vhttpq接。否则代码将乱成一片?br /> <br />5  要预见到跨域讉K问题的存在,不管是否跨域始终通过代理面讉K。这样静态页面才能在需要的时候自qUd到其他服务器上?br /> <br />6  量用一致的代码库解析xml生成昄面Q不要在每个面上各自写解析xml和生成html的代码。否则页面将来非帔R以维护。Uuzone采用的开源项目sarissa或者Google发v的开业项目Ajaxslt都是可以考虑的选择?/p> <img src ="http://www.tkk7.com/aojilee/aggbug/45055.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/aojilee/" target="_blank">奥吉</a> 2006-05-08 17:50 <a href="http://www.tkk7.com/aojilee/articles/45055.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ajax获得XmlDocument ?XMLHttpRequest objectshttp://www.tkk7.com/aojilee/articles/40892.html奥吉奥吉Thu, 13 Apr 2006 06:23:00 GMThttp://www.tkk7.com/aojilee/articles/40892.htmlhttp://www.tkk7.com/aojilee/comments/40892.htmlhttp://www.tkk7.com/aojilee/articles/40892.html#Feedback0http://www.tkk7.com/aojilee/comments/commentRss/40892.htmlhttp://www.tkk7.com/aojilee/services/trackbacks/40892.htmlvar xDoc=null;
if (document.implementation
&& document.implementation.createDocument){
xDoc=document.implementation
.createDocument("","",null);
}else if (typeof ActiveXObject != "undefined"){
var msXmlAx==null;
try{
msXmlAx=new ActiveXObject
("Msxml2.DOMDocument");
}catch (e){
msXmlAx=new ActiveXObject
("Msxml.DOMDocument");
}
xDoc=msXmlAx;
}
if (xDoc==null || typeof xDoc.load=="undefined"){
xDoc=null;
}
return xDoc;
}


function getXMLHTTPRequest() {
var xRequest=null;
if (window.XMLHttpRequest) {
xRequest=new XMLHttpRequest();
}else if (typeof ActiveXObject != "undefined"){
xRequest=new ActiveXObject
("Microsoft.XMLHTTP");
}
return xRequest;
}

奥吉 2006-04-13 14:23 发表评论
]]>
վ֩ģ壺 ޴ɫ߹ۿ| þþƷAV| ߹͵Ʒ| һ߹ۿ| þۺϹ׾Ʒ| ѹҹƵ | ҹƷһ8050| ڵ߹ۿƵ| ԲƵ| ҹƵѳ| ѹۿ˳վ| ޸ľƷԭ| ޾Ʒ| AVۺɫһ| AV˿߹ۿ| ޹һ| þþùƷһ| һ߹ۿ| ޾ƷŮһ | þþƷۺ| ˳ɻ߹ۿ| ɫվWWWվ| ۺƵ| 99鶹þþùƷ| ˳վ߹ۿ| xxxxձ| Ʒ_ۿ | 99ƷȫѹۿƵ| ѿŮճˮƵ| ӰԺ߹ۿ| ˾޾ƷӰԺ | ޹ƷȾþ| ˳ɵӰվ| װɫƵ| ߹ۿƬ˳Ƶ| Ƶ| žžƵ| ޾Ʒþþþ66| ˳ھþۺվ| ˳Ƶ߹ۿ| ޾ƷƵ|