﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-心情小站-随笔分类-ajax相关</title><link>http://www.blogjava.net/RongHao/category/20774.html</link><description>勤学、勤思</description><language>zh-cn</language><lastBuildDate>Sun, 02 Mar 2008 08:44:07 GMT</lastBuildDate><pubDate>Sun, 02 Mar 2008 08:44:07 GMT</pubDate><ttl>60</ttl><item><title>理解DOM事件流</title><link>http://www.blogjava.net/RongHao/archive/2008/03/02/183259.html</link><dc:creator>ronghao</dc:creator><author>ronghao</author><pubDate>Sun, 02 Mar 2008 06:54:00 GMT</pubDate><guid>http://www.blogjava.net/RongHao/archive/2008/03/02/183259.html</guid><wfw:comment>http://www.blogjava.net/RongHao/comments/183259.html</wfw:comment><comments>http://www.blogjava.net/RongHao/archive/2008/03/02/183259.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/RongHao/comments/commentRss/183259.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/RongHao/services/trackbacks/183259.html</trackback:ping><description><![CDATA[<br />
DOM事件标准定义了两种事件流，这两种事件流有着显著的不同并且可能对你的应用有着相当大的影响。这两种事件流分别是捕获和冒泡。和许多Web技术一样，在它们成为标准之前，Netscape和微软各自不同地实现了它们。Netscape选择实现了捕获事件流，微软则实现了冒泡事件流。幸运的是，W3C决定组合使用这两种方法,并且大多数新浏览器都遵循这两种事件流方式。<br />
<br />
默认情况下，事件使用冒泡事件流，不使用捕获事件流。然而，在Firefox和Safari里，你可以显式的指定使用捕获事件流，方法是在注册事件时传入useCapture参数，将这个参数设为true。下面用个例子分别来测试这两种事件流。<br />
<br />
<strong>1、冒泡事件流</strong><br />
当事件在某一DOM元素被触发时，例如用户在客户名字节点上点击鼠标，事件将跟随着该节点继承自的各个父节点冒泡穿过整个的DOM节点层次，直到它遇到依附有该事件类型处理器的节点，此时，该事件是onclick事件。在冒泡过程中的任何时候都可以终止事件的冒泡，在遵从W3C标准的浏览器里可以通过调用事件对象上的stopPropagation()方法，在Internet Explorer里可以通过设置事件对象的cancelBubble属性为true。如果不停止事件的传播，事件将一直通过DOM冒泡直至到达文档根。<br />
<br />
测试的HTML文件，其中用到了mootools-release-1.11.js，对mootools的代码进行了改动：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">addListener:&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(type,&nbsp;fn,setCapture){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.addEventListener)&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.addEventListener(type,&nbsp;fn,&nbsp;setCapture);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.attachEvent('on'&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;type,&nbsp;fn);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(setCapture)&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.setCapture(</span><span style="color: #0000ff;">true</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
</span></div>
&nbsp;&nbsp; &nbsp;&nbsp;  <br />
给addListener方法里增加了setCapture参数，用于测试捕获事件流。<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&lt;</span><span style="color: #000000;">body</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">div&nbsp;&nbsp;id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">dd1-ct</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;style</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">width:400px;height:400px;border:1px&nbsp;solid&nbsp;#999;padding:2px</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">Container<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">div&nbsp;id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">dd1-item1</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;style</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">width:200px;height:200px;border:1px&nbsp;solid&nbsp;#999;padding:2px</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">Item1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">div&nbsp;&nbsp;id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">dd1-item2</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;style</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">width:100px;height:100px;border:1px&nbsp;solid&nbsp;#999;padding:2px</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">Item2</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">div</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">div</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">div</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">div&nbsp;id</span><span style="color: #000000;">=</span><span style="color: #000000;">'rh'</span><span style="color: #000000;">&gt;&lt;/</span><span style="color: #000000;">div</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">body</span><span style="color: #000000;">&gt;</span></div>
<br />
效果：<br />
<img src="http://www.blogjava.net/images/blogjava_net/ronghao/flow.jpg" alt="" border="0" /><br />
js:<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">fn1</span><span style="color: #000000;">=</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(e){<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;e.stopPropagation();</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;$('rh').innerHTML</span><span style="color: #000000;">+=</span><span style="color: #000000;">'Item1&nbsp;clicked</span><span style="color: #000000;">!******</span><span style="color: #000000;">';<br />
};<br />
<br />
fn2</span><span style="color: #000000;">=</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(e){<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;e.stopPropagation();</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;$('rh').innerHTML</span><span style="color: #000000;">+=</span><span style="color: #000000;">'Item2&nbsp;clicked</span><span style="color: #000000;">!-------</span><span style="color: #000000;">';<br />
};<br />
<br />
fn</span><span style="color: #000000;">=</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(e){<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;e.stopPropagation();</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;$('rh').innerHTML</span><span style="color: #000000;">+=</span><span style="color: #000000;">'Container&nbsp;clicked</span><span style="color: #000000;">!&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;</span><span style="color: #000000;">';<br />
};<br />
&nbsp;&nbsp;&nbsp;<br />
$('dd1</span><span style="color: #000000;">-</span><span style="color: #000000;">item2').addListener('click',&nbsp;fn2.bindWithEvent(),</span><span style="color: #0000ff;">false</span><span style="color: #000000;">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
$('dd1</span><span style="color: #000000;">-</span><span style="color: #000000;">item1').addListener('click',&nbsp;fn1.bindWithEvent(),</span><span style="color: #0000ff;">false</span><span style="color: #000000;">);<br />
$('dd1</span><span style="color: #000000;">-</span><span style="color: #000000;">ct').addListener('click',&nbsp;fn.bindWithEvent(),</span><span style="color: #0000ff;">false</span><span style="color: #000000;">);</span></div>
<br />
<br />
测试结果ie和ff下效果一致：单击item2,会依次触发fn2、fn1、fn;单击item1,会依次触发fn1、fn;单击Container,只会触发fn;当在任何一个事件处理器里调用e.stopPropagation();都会阻止事件的冒泡。<br />
<br />
<strong>2、捕获事件流</strong><br />
事件的处理将从DOM层次的根开始，而不是从触发事件的目标元素开始，事件被从目标元素的所有祖先元素依次往下传递。在这个过程中，事件会被从文档根到事件目标元素之间各个继承派生的元素所捕获，如果事件监听器在被注册时设置了useCapture属性为true,那么它们可以被分派给这期间的任何元素以对事件做出处理；否则，事件会被接着传递给派生元素路径上的下一元素，直至目标元素。事件到达目标元素后，它会接着通过DOM节点再进行冒泡。<br />
<br />
这里ie与ff存在着很大的差异，甚至ie6与ie7的表现也各不相同，所以分开测试。<br />
<br />
<strong>a、ff</strong><br />
事件从从DOM层次的根开始往下传递时，会被useCapture属性为true的事件监听器所捕获，而到达目标元素再从目标元素冒泡时，则会被useCapture属性为false的事件监听器所捕获。当在任何一个事件处理器里调用e.stopPropagation();都会阻止事件的传播。<br />
<br />
<strong>b、ie6</strong><br />
用事实说话：<br />
<br />
第一种情况：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">$('dd1</span><span style="color: #000000;">-</span><span style="color: #000000;">item2').addListener('click',&nbsp;fn2.bindWithEvent(),</span><span style="color: #0000ff;">true</span><span style="color: #000000;">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
$('dd1</span><span style="color: #000000;">-</span><span style="color: #000000;">item1').addListener('click',&nbsp;fn1.bindWithEvent(),</span><span style="color: #0000ff;">true</span><span style="color: #000000;">);<br />
$('dd1</span><span style="color: #000000;">-</span><span style="color: #000000;">ct').addListener('click',&nbsp;fn.bindWithEvent(),</span><span style="color: #0000ff;">true</span><span style="color: #000000;">);</span></div>
<br />
单击浏览器的任何位置，都只是触发fn；<br />
<br />
第二种情况：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">$('dd1</span><span style="color: #000000;">-</span><span style="color: #000000;">item2').addListener('click',&nbsp;fn2.bindWithEvent(),</span><span style="color: #0000ff;">true</span><span style="color: #000000;">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
$('dd1</span><span style="color: #000000;">-</span><span style="color: #000000;">item1').addListener('click',&nbsp;fn1.bindWithEvent(),</span><span style="color: #0000ff;">true</span><span style="color: #000000;">);<br />
$('dd1</span><span style="color: #000000;">-</span><span style="color: #000000;">ct').addListener('click',&nbsp;fn.bindWithEvent(),</span><span style="color: #0000ff;">false</span><span style="color: #000000;">);</span></div>
<br />
单击浏览器的任何位置，会依次触发fn1、fn;<br />
<br />
第三种情况：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">$('dd1</span><span style="color: #000000;">-</span><span style="color: #000000;">item2').addListener('click',&nbsp;fn2.bindWithEvent(),</span><span style="color: #0000ff;">true</span><span style="color: #000000;">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
$('dd1</span><span style="color: #000000;">-</span><span style="color: #000000;">item1').addListener('click',&nbsp;fn1.bindWithEvent(),</span><span style="color: #0000ff;">false</span><span style="color: #000000;">);<br />
$('dd1</span><span style="color: #000000;">-</span><span style="color: #000000;">ct').addListener('click',&nbsp;fn.bindWithEvent(),</span><span style="color: #0000ff;">false</span><span style="color: #000000;">);</span></div>
<br />
单击浏览器的任何位置，会依次触发fn2、fn1、fn;<br />
<br />
结论：如果HTML元素捕获了通过该元素的setCapture()方法对这个元素的设置，依附于该元素的处理器将会被事件触发，即使setCapture()方法<br />
被调用的这个元素不在目标元素的祖先路径中。事实上你甚至单击浏览器的非页面部分都会触发事件处理器。并且事件一旦被捕获就不会继续再<br />
往下传播（即使该元素在目标元素的祖先路径中），而是立刻冒泡。e.stopPropagation();会阻止事件的冒泡。<br />
&nbsp; <br />
<strong>c、ie7</strong><br />
测试效果与冒泡事件流一致。将对捕获事件流的支持干掉了？<br />
&nbsp; <br />
<strong>结论：正如mootools所做的，避免捕获事件流。</strong><br />
<br />
<br />
<img src ="http://www.blogjava.net/RongHao/aggbug/183259.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/RongHao/" target="_blank">ronghao</a> 2008-03-02 14:54 <a href="http://www.blogjava.net/RongHao/archive/2008/03/02/183259.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>js的流程设计器，我们需要什么</title><link>http://www.blogjava.net/RongHao/archive/2008/02/13/179837.html</link><dc:creator>ronghao</dc:creator><author>ronghao</author><pubDate>Wed, 13 Feb 2008 14:08:00 GMT</pubDate><guid>http://www.blogjava.net/RongHao/archive/2008/02/13/179837.html</guid><wfw:comment>http://www.blogjava.net/RongHao/comments/179837.html</wfw:comment><comments>http://www.blogjava.net/RongHao/archive/2008/02/13/179837.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/RongHao/comments/commentRss/179837.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/RongHao/services/trackbacks/179837.html</trackback:ping><description><![CDATA[这是一个完全基于js的应用程序，区别于一般的web应用，它是oaop。大概需要一些什么样的工作呢？<br />
<br />
<strong>大概的概念：<br />
<br />
</strong>1、容器<br />
&nbsp;是的，需要容器。容器的两个目的：布局和管理组件。组件之间的相互通信以及影响都需要容器来协调。管理组件之间的状态，组件需要向容器进行注册。对组件传播过来的事件，容器需要做出处理，调用相关其他组件的方法或者忽略或者继续向上一级容器传播。<br />
<br />
2、组件<br />
&nbsp;组件的目的是完全屏蔽对dom编程的依赖，同时屏蔽底层的浏览器事件，例如鼠标单击、双击等等，对这些事件进行完全的封装。组件有着自己的生命周期：初始化、渲染、重画、销毁等等。由组件完成页面的渲染工作，例如节点、画板、连线等等。<br />
<br />
3、模型<br />
&nbsp;在页面进行建模是必要的，例如活动节点、流程等等，这些模型与组件衔接，它们之间的状态互相影响，比如节点组件名称的改变实际影响的是所对于节点模型的属性。画板节点的增加实际也会给响应的流程定义模型新增一个活动节点。<br />
<br />
4、与服务器交互<br />
&nbsp;与服务器的交互完全基于xml。流程定义模型有着自己的xml方法，由xml解析为模型，由模型解析为xml，双向的过程。本地存储。很自然的选择。<br />
&nbsp;<br />
<strong>可能的难点：</strong><br />
最大的难点就是组件的实现，事件的处理以及传播机制。<br />
<strong><br />
开发的过程：<br />
<br />
</strong>1、底层库的选择<br />
&nbsp;面向对象的开发方式，底层库需要完成的工作：继承、接口实现、事件的统一处理接口、element DOM编程的封装。<br />
<br />
2、基本组件的开发<br />
&nbsp;画板、图形组件、连线组件、弹出面板、简单表格组件、树等等。封装基本的事件。可以定制事件。<br />
<br />
3、容器的开发，管理组件<br />
&nbsp;组件实际也是容器的实现，比如画板的概念。画板中节点之间的互相影响。<br />
<br />
4、加入模型的支持<br />
<br />
5、xml与模型之间的js解析<br />
<br />
<strong>参考：</strong><br />
ext是一个不错的参考，但是太笨重，功能越多越缓慢，轻量实现。主要参考其中容器以及组件的概念。<br />
draw2d 实现太简单，基本就是一个图形库，考虑其中对图形组件的实现。<br />
<img src ="http://www.blogjava.net/RongHao/aggbug/179837.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/RongHao/" target="_blank">ronghao</a> 2008-02-13 22:08 <a href="http://www.blogjava.net/RongHao/archive/2008/02/13/179837.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《Enterprise AJAX——高性能Web应用的构建策略》目录</title><link>http://www.blogjava.net/RongHao/archive/2008/01/24/177557.html</link><dc:creator>ronghao</dc:creator><author>ronghao</author><pubDate>Thu, 24 Jan 2008 10:21:00 GMT</pubDate><guid>http://www.blogjava.net/RongHao/archive/2008/01/24/177557.html</guid><wfw:comment>http://www.blogjava.net/RongHao/comments/177557.html</wfw:comment><comments>http://www.blogjava.net/RongHao/archive/2008/01/24/177557.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/RongHao/comments/commentRss/177557.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/RongHao/services/trackbacks/177557.html</trackback:ping><description><![CDATA[<h2>内容</h2>
<br />
序<br />
致谢<br />
关于作者<br />
<br />
<h3>第1章 AJAX和富互联网应用</h3>
&nbsp;&nbsp;&nbsp; 转变中的Web<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 传统Web应用的痛处<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; AJAX止痛药<br />
&nbsp;&nbsp;&nbsp; 企业中的AJAX<br />
&nbsp;&nbsp;&nbsp; 采用AJAX的驱动因素<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 可用性<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 网络利用率<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 以数据为中心<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 递增的技巧、工具和技术升级<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 服务器不可知论<br />
&nbsp;&nbsp;&nbsp; 关于应用<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; AJAX技术<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 编程模式<br />
&nbsp;&nbsp;&nbsp; AJAX的替换技术<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; XUL<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; XAML<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; Java Applets 和Web Start<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; Adobe Flash，Flex和Apollo<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; OpenLaszlo<br />
&nbsp;&nbsp;&nbsp; 小结<br />
&nbsp;&nbsp;&nbsp; 资源<br />
<br />
<h3>第2章 AJAX组成技术(AJAX Building block)<br />
</h3>
&nbsp;&nbsp;&nbsp; JavaScript<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; JavaScript类型<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 闭包<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 面向对象的JavaScript<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; Prototype属性<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 面向对象编程(OOP)和继承(Inheritance)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 易变性(Mutability)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 线程(Threading)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 错误处理(Error Handling)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 命名空间(Namespacing)<br />
&nbsp;&nbsp;&nbsp; 文档对象模型(Document Object Model)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 基本原理<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 操作DOM<br />
&nbsp;&nbsp;&nbsp; 层叠样式表<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 继承和层叠(Inheritance and the Cascade)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 内联样式<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 样式表<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 动态样式<br />
&nbsp;&nbsp;&nbsp; 事件<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 事件流<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 事件绑定<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 跨浏览器事件<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 事件对象<br />
&nbsp;&nbsp;&nbsp; 客户端通信(Client-Side Messageing)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; XMLHttpRequest基础<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 处理数据<br />
&nbsp;&nbsp;&nbsp; 小结<br />
&nbsp;&nbsp;&nbsp; 资源<br />
<br />
<h2>第3章 Web浏览器中的AJAX</h2>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 增量的AJAX<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 对服务器影响<br />
&nbsp;&nbsp;&nbsp; HTML标准<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 文档类型定义(Document Type Definitions)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 盒子模型<br />
&nbsp;&nbsp;&nbsp; 启动加载AJAX组件<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; onload事件<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 浏览器<span style="background-color: #ffffff;">编码技巧</span><br />
&nbsp;&nbsp;&nbsp; 模型-视图-控制器<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 视图<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 控制器<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 模型<br />
&nbsp;&nbsp;&nbsp; AJAX MVC<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; AJAX模型<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; AJAX视图<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; AJAX控制器<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 面向方面的JavaScript<br />
&nbsp;&nbsp;&nbsp; 小结<br />
&nbsp;&nbsp;&nbsp; 资源<br />
<br />
<h2>第4章 AJAX组件</h2>
&nbsp;&nbsp;&nbsp; 命令式组件<br />
&nbsp;&nbsp;&nbsp; 声明式组件<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 服务器端声明式编程<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 声明式Google地图<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 替代方法<br />
<br />
&nbsp;&nbsp;&nbsp; 自定义声明式组件<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 行为式组件<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 声明式组件<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 关于声明<br />
&nbsp;&nbsp;&nbsp; 构建组件<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 基本功能<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 连接到服务器<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最终版本<br />
&nbsp;&nbsp;&nbsp; 小结<br />
&nbsp;&nbsp;&nbsp; 资源<br />
<br />
<h2>第5章 从设计到部署</h2>
&nbsp;&nbsp;&nbsp; 设计<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 为AJAX建模<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 应用模型-视图-控制器模式<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 优先考虑性能问题<br />
&nbsp;&nbsp;&nbsp; 设计原型<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 线框绘制<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 验证设计决议<br />
&nbsp;&nbsp;&nbsp; 测试<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 测试驱动开发<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 调试<br />
&nbsp;&nbsp;&nbsp; 部署<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; JavaScript压缩<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 图片<span style="background-color: #ffffff;">合并</span><br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 保护知识产权<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 文档<br />
&nbsp;&nbsp;&nbsp; 小结<br />
&nbsp;&nbsp;&nbsp; 资源<br />
<h2>第6<span style="background-color: #ffffff;">章 AJAX架构</span></h2>
&nbsp;&nbsp;&nbsp; 多层架构：从单层到多层<br />
&nbsp;&nbsp;&nbsp;&nbsp;异步消息<br />
&nbsp;&nbsp;&nbsp; 轮询<br />
&nbsp;&nbsp;&nbsp; 服务器推送<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; Comet<br />
&nbsp;&nbsp;&nbsp; 跟踪请求<br />
&nbsp;&nbsp;&nbsp; 缓存：处理数据<br />
&nbsp;&nbsp;&nbsp; 基本缓存<br />
&nbsp;&nbsp;&nbsp; 在组件中缓存<br />
&nbsp;&nbsp;&nbsp; 在浏览器中缓存<br />
&nbsp;&nbsp;&nbsp; 在服务器中缓存<br />
&nbsp;&nbsp;&nbsp; 在数据库中缓存<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; MySQL<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; MS SQL Server<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; Oracle<br />
&nbsp;&nbsp;&nbsp; 更新服务器端模型：并发<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 悲观锁定<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 只读锁定<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 乐观锁定<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 冲突鉴定<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 冲突解决<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 自动化的冲突解决<br />
&nbsp;&nbsp;&nbsp; 流量控制(Throttling)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 客户端<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 服务端<br />
&nbsp;&nbsp;&nbsp; 可伸缩性<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 负载平衡和群集<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; AJAX可伸缩性问题<br />
&nbsp;&nbsp;&nbsp; 离线AJAX<br />
&nbsp;&nbsp;&nbsp; Firefox离线存储<br />
&nbsp;&nbsp;&nbsp; Internet Explorer userData离线存储<br />
&nbsp;&nbsp;&nbsp; 使用Flash客户端存储<br />
&nbsp;&nbsp;&nbsp; 离线AJAX和并发<br />
&nbsp;&nbsp;&nbsp; 小结<br />
&nbsp;&nbsp;&nbsp; 资源<br />
<br />
<h2>第7章 Web服务和安全性</h2>
&nbsp;&nbsp;&nbsp; Web服务<br />
&nbsp;&nbsp;&nbsp; Web服务协议<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 表象状态传输<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; XML远程过程调用<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; Web服务<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 选择合适的工具<br />
&nbsp;&nbsp;&nbsp; 客户端的SOAP<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; IBM Web服务JavaScript库<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; Firefox<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; Internet Explorer<br />
&nbsp;&nbsp;&nbsp; 跨域Web服务<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 服务器代理<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; URL片段标识符<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; Flash跨域XML<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 脚本注入<br />
&nbsp;&nbsp;&nbsp; 安全性<br />
&nbsp;&nbsp;&nbsp; AJAX的安全性考虑<br />
&nbsp;&nbsp;&nbsp; 跨域漏洞<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 跨站脚本<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 跨站伪造请求<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; JavaScipt劫持<br />
&nbsp;&nbsp; SQL注入<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 预处理语句<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 存储过程<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; XPath注入<br />
&nbsp;&nbsp;&nbsp; 数据加密和隐私<br />
&nbsp;&nbsp;&nbsp; 防火墙<br />
&nbsp;&nbsp;&nbsp; 小结<br />
&nbsp;&nbsp;&nbsp; 资源<br />
<br />
<h2>第8章 AJAX可用性</h2>
<br />
&nbsp;&nbsp;&nbsp; 常见问题<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 后退按钮和书签<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 页面大小<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 自动提交<br />
&nbsp;&nbsp;&nbsp; 可访问性<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 识别用户的可访问性需求<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; JavaScript和Web可访问性<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; <span style="background-color: #ffffff;">屏幕阅读器</span>和可访问性<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 兼容JAWS的AJAX交互<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 键盘可访问性<br />
&nbsp;&nbsp;&nbsp; 可用性测试<br />
&nbsp;&nbsp;&nbsp; 迅速而又随性的测试<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; <span style="background-color: #ffffff;">招募参与者</span><br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 设计和运行测试<br />
&nbsp;&nbsp;&nbsp; 软件断言测试<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 用于测试可用性的工具<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 对软件辅助测试的一般忠告<br />
&nbsp;&nbsp;&nbsp; 小结<br />
&nbsp;&nbsp;&nbsp; 资源<br />
<br />
<h2>第9章 用户界面模式</h2>
&nbsp;&nbsp;&nbsp; 显示模式<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 动画模式<br />
&nbsp;&nbsp;&nbsp; 交互模式<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 基本交互模式<br />
&nbsp;&nbsp;&nbsp; 小结<br />
&nbsp;&nbsp;&nbsp; 资源<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 拖拽资源<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 进度栏资源<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 活动指示器资源<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 颜色淡出资源<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 即时编辑资源<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 向下钻取资源<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 即时搜索资源<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 即时表单资源<br />
<br />
<h2>第10章 风险和最佳实践</h2>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 风险来源<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 技术风险<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 文化和政治风险<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 市场风险<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 技术风险<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; <span style="background-color: #ffffff;">范围</span><br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 浏览器能力<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 可维护性<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 向前兼容<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 第三工具支持和代码过时<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 文化和政治风险<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 终端用户的期待<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 可培训性<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 合法性<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 市场风险<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 搜索引擎的可访问性<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; <span style="background-color: #ffffff;">范围</span><br style="background-color: #ffffff;" />
<span style="background-color: #ffffff;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 货币化</span><br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 风险评估和最佳实践<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 采用特定的AJAX框架或者组件<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 渐进增强和不唐突的JavaScript<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; Google 网站地图<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 可视化的提示<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 避免镀金式设计<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 采用一种收益模型<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 把培训作为应用的一部分<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 小结<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 资源<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 搜索引擎优化<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 统计<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 网站地图<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 屏幕截取工具<br />
<br />
<br />
<h2>第11章 案例研究</h2>
&nbsp;&nbsp;&nbsp; 基于Web2.0 重新武装美国国防部<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 背景<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 挑战<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 解决方案<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 采用技术<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 成果<br />
&nbsp;&nbsp;&nbsp; Agrium公司整合AJAX技术到业务<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 背景<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 挑战<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 解决方案<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 采用技术<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 成果<br />
&nbsp;&nbsp;&nbsp; AJAX助力国际运输和物流公司<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 背景<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 挑战<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 解决方案<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 采用技术<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 成果<br />
&nbsp;&nbsp;&nbsp; 小结<br />
&nbsp;&nbsp;&nbsp; 资源<br />
<h2>附录A OpenAjax Hub</h2>
&nbsp;&nbsp;&nbsp; 主要特性：发布/注册管理器<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 范例<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 未来对OpernAjax Hub支持的工具包<br />
<br />
<h3>索引</h3>
<img src ="http://www.blogjava.net/RongHao/aggbug/177557.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/RongHao/" target="_blank">ronghao</a> 2008-01-24 18:21 <a href="http://www.blogjava.net/RongHao/archive/2008/01/24/177557.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>简析EXT的事件</title><link>http://www.blogjava.net/RongHao/archive/2008/01/17/175955.html</link><dc:creator>ronghao</dc:creator><author>ronghao</author><pubDate>Thu, 17 Jan 2008 07:17:00 GMT</pubDate><guid>http://www.blogjava.net/RongHao/archive/2008/01/17/175955.html</guid><wfw:comment>http://www.blogjava.net/RongHao/comments/175955.html</wfw:comment><comments>http://www.blogjava.net/RongHao/archive/2008/01/17/175955.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/RongHao/comments/commentRss/175955.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/RongHao/services/trackbacks/175955.html</trackback:ping><description><![CDATA[事件无疑是AJAX应用中最重要的部分，EXT将事件分为了两种：自定义事件与浏览器事件。<br />
<br />
<strong>自定义事件</strong><br />
按字面意思就是用户自己定义的事件，这个事件通常与组件相关。并且需要用户根据组件的状态自己触发。相关的类Ext.util.Observable 、Ext.util.Event（Observable.js）。Ext.util.Observable是所有组件（component）的父类，它使得所有的组件都可以任意的添加自定义事件，它的events属性对事件进行维护，这些事件实际都是Ext.util.Event对象，Ext.util.Event对象里的listeners属性对与该事件相关的处理器进行维护。Observable给所有的子类提供了一个统一的接口来发布事件以及管理事件，这一特性对于组件来说是至关重要的。<br />
<br />
<strong>浏览器事件</strong><br />
即传统意义上的鼠标单击、移动等等事件，这些事件是由浏览器根据用户的动作自己触发的，与页面元素紧密关联。相关的类Ext.Element 、Ext.EventManager、Ext.EventObject、Ext.lib.Event 。Element包含了常见的DOM方法和属性，提供一个快捷的、统一的、跨浏览器的接口，内置了常用的DOM节点的动作，并且是跨浏览器的定位的位置、大小、动画、拖放等等。对事件的处理，Element实际将这一处理委托给了EventManager，由EventManager对页面所有的浏览器事件进行管理，例如增加事件处理器、移除事件处理器等等，另外EventManager还定义了几个很重要的方法：onDocumentReady、onWindowResize、onTextResize。其中onDocumentReady尤为重要，通常在页面需要通过它来启动我们的AJAX程序，它会在页面document渲染完毕而图片等还未下载时调用我们的启动函数。至于EventObject，它则是对原始的浏览器事件进行了封装，提供给事件处理器一个统一一致的事件接口。Ext.lib.Event呢？EventManager的很多功能其实是调用它完成的，它的listeners、unloadListeners维护着所有的事件处理器。
<img src ="http://www.blogjava.net/RongHao/aggbug/175955.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/RongHao/" target="_blank">ronghao</a> 2008-01-17 15:17 <a href="http://www.blogjava.net/RongHao/archive/2008/01/17/175955.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OPENAJAX HUB介绍</title><link>http://www.blogjava.net/RongHao/archive/2008/01/01/171978.html</link><dc:creator>ronghao</dc:creator><author>ronghao</author><pubDate>Tue, 01 Jan 2008 04:57:00 GMT</pubDate><guid>http://www.blogjava.net/RongHao/archive/2008/01/01/171978.html</guid><wfw:comment>http://www.blogjava.net/RongHao/comments/171978.html</wfw:comment><comments>http://www.blogjava.net/RongHao/archive/2008/01/01/171978.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/RongHao/comments/commentRss/171978.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/RongHao/services/trackbacks/171978.html</trackback:ping><description><![CDATA[正在翻译《Enterprise AJAX》，附录里介绍到OPENAJAX HUB，google相应的中文资料很少，所以就把译文贴出来：）<br />
<br />
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: 宋体; color: black;" lang="EN-US">OpenAjax Hub</span><span style="font-family: 宋体; color: black;">（&#8220;<span lang="EN-US">Hub</span>&#8221;）主要用来处理<span lang="EN-US">Web</span>应用开发者需要在同一个应用中同时使用多个<span lang="EN-US">AJAX</span>运行库的情况。它提供标准的<span lang="EN-US">JavaScript</span>，当被包含在<span lang="EN-US">AJAX</span>驱动的<span lang="EN-US">Web</span>应用里时，它使得多个<span lang="EN-US">AJAX</span>工具包能够在同一个页面里一起协同工作。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: 宋体; color: black;" lang="EN-US">AJAX</span><span style="font-family: 宋体; color: black;">应用开发者在开发中的需求往往存在着巨大的差异，这导致了如今市场上存在超过<span lang="EN-US">200</span>个各种各样的<span lang="EN-US">AJAX</span>产品，同时这些产品的架构和特性也存在巨大的差异。对一些开发者来说，他们认为开发中最重要的因素是找到一个能提供与后端服务器强大集成能力的<span lang="EN-US">AJAX</span>工具包。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: 宋体; color: black;" lang="EN-US">而对其他一些开发者来说，最重要的因素则是能否应用特殊的客户端组件（例如，富数据网格组件或交互式的图表组件）。结果，<span lang="EN-US">AJAX</span>生态系统发展到现在，开发者在大部分时间里都能找到满足他们每个特殊需求的<span lang="EN-US">AJAX</span>工具包，但是也存在问题，他们往往必须在同一个<span lang="EN-US">Web</span>应用里混合和匹配使用多个<span lang="EN-US">AJAX</span>工具包才能满足所有的需求。<span lang="EN-US"><o:p></o:p></span><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: 宋体; color: black;" lang="EN-US">Hub</span><span style="font-family: 宋体; color: black;">应用的一个重要场合是门户和内容糅合，这里，应用开发者创建一个页面，页面里松散组装预先包装好的应用组件。<span lang="EN-US">Hub</span>实际上是保证这些<span lang="EN-US">AJAX</span>驱动的应用组件能够使用多个不同的<span lang="EN-US">AJAX</span>工具包创建。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><strong><span style="font-family: 宋体;">主要特性：<span lang="EN-US">Hub </span>的发布<span lang="EN-US">/</span>订阅管理器<span lang="EN-US"><o:p></o:p></span></span></strong></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: 宋体;" lang="EN-US">Hub</span><span style="font-family: 宋体;">的主要特性是它的发布<span lang="EN-US">/</span>订阅管理器（&#8220;<span lang="EN-US">pub/sub</span>管理器&#8221;）。 <span lang="EN-US">pub/sub</span>管理器允许内容糅合的一个部分能够传播其他应用组件所订阅的事件。例如，假设存在一个日历组件，该组件允许用户能够选取一个特定的日期。内容糅合里可能存在多个<span lang="EN-US">UI</span>组件，这些组件都需要根据新选择的日历日期而更新它们的视觉外观。在这种情况下，日历组件将发布一个&#8220;新日历日期&#8221;的事件，而其他可视化组件将订阅这个事件。因此，<span lang="EN-US">pub/sub</span>管理器的通用消息的优点是给由不同<span lang="EN-US">AJAX</span>工具包所构建的组件之间提供了一个关键的集成机制。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: 宋体;" lang="EN-US">Hub</span><span style="font-family: 宋体;">的<span lang="EN-US">pub/sub</span>管理器提供各种各样的先进特性，例如对事件名称通配符的强大支持，在下面的例子里并没有展示这个特性。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><strong><span style="font-family: 宋体;">范例<span lang="EN-US"><o:p></o:p></span></span></strong></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: 宋体;">让我们假设现在有这样一个商务智能应用，该应用使用下面的<span lang="EN-US">AJAX</span>运行库：<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: 宋体;">■ </span><span style="font-family: 宋体;" lang="EN-US">UTILS.js, </span><span style="font-family: 宋体;">对浏览器的<span lang="EN-US">JavaScript</span>环境提供非常有用的扩展，例如<span lang="EN-US">XMLHttpRequest</span>的<span lang="EN-US">APIs</span>。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: 宋体;">■ </span><span style="font-family: 宋体;" lang="EN-US">CALENDAR.js,</span><span style="font-family: 宋体;">提供一个日历组件<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: 宋体;">■ </span><span style="font-family: 宋体;" lang="EN-US">CHARTS.js, </span><span style="font-family: 宋体;">提供一个图表组件<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="margin-left: 18pt; text-align: left; text-indent: -18pt;" align="left"><!--[if !supportLists]--><span style="font-family: 宋体;" lang="EN-US"><span>■<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><!--[endif]--><span style="font-family: 宋体;" lang="EN-US">DATAGRID.js,</span><span style="font-family: 宋体;">提供一个交互式的数据网格组件<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: 宋体;" lang="EN-US">该应用有一个唯一的日历组件，用户可以以图表组件的形式（例如，每日情形、每周情形、每月情形和每年情形的柱状图）和数据网格组件的形式（例如，地方数据与全国数据，两种数据都以用户选择的感兴趣的列展示）选择其中的一些数据视图<span lang="EN-US"><o:p></o:p></span>当一个新的日期在日历组件里被选择时，各个用户指定的可视化组件（例如，图表和<span lang="EN-US">/</span>或数据网格组件）都需要被更新。<span lang="EN-US"><o:p></o:p></span><br />
<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: 宋体;" lang="EN-US">实现该应用的一个方法是在加载其他<span lang="EN-US">AJAX</span>库之前加载<span lang="EN-US">OpenAjax Hub</span>的<span lang="EN-US">JavaScript</span>。例如：<span lang="EN-US"><o:p></o:p></span><br />
<o:p></o:p></span></p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&lt;</span><span style="color: #000000;">html</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<br />
</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">head</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<br />
<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
<br />
</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">script&nbsp;type</span><span style="color: #000000;">=</span><span style="color: #000000;">&#8221;text</span><span style="color: #000000;">/</span><span style="color: #000000;">javascript&#8221;&nbsp;src</span><span style="color: #000000;">=</span><span style="color: #000000;">&#8221;OpenAjax.js&#8221;</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
<br />
</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">script&nbsp;type</span><span style="color: #000000;">=</span><span style="color: #000000;">&#8221;text</span><span style="color: #000000;">/</span><span style="color: #000000;">javascript&#8221;&nbsp;src</span><span style="color: #000000;">=</span><span style="color: #000000;">&#8221;UTILS.js&#8221;</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
<br />
</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">script&nbsp;type</span><span style="color: #000000;">=</span><span style="color: #000000;">&#8221;text</span><span style="color: #000000;">/</span><span style="color: #000000;">javascript&#8221;&nbsp;src</span><span style="color: #000000;">=</span><span style="color: #000000;">&#8221;CALENDAR.js&#8221;</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
<br />
</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">script&nbsp;type</span><span style="color: #000000;">=</span><span style="color: #000000;">&#8221;text</span><span style="color: #000000;">/</span><span style="color: #000000;">javascript&#8221;&nbsp;src</span><span style="color: #000000;">=</span><span style="color: #000000;">&#8221;CHARTS.js&#8221;</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
<br />
</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">script&nbsp;type</span><span style="color: #000000;">=</span><span style="color: #000000;">&#8221;text</span><span style="color: #000000;">/</span><span style="color: #000000;">javascript&#8221;&nbsp;src</span><span style="color: #000000;">=</span><span style="color: #000000;">&#8221;DATAGRID.js&#8221;</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
<br />
<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
<br />
</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">head</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<br />
<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
</span></div>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: 宋体;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: 宋体;">一些<span lang="EN-US">AJAX</span>运行库包含<span lang="EN-US">OpenAjax Hub</span>，将<span lang="EN-US">Hub</span>作为它们标准发布的一部分，在这种情况下，只要特定的<span lang="EN-US">AJAX</span>运行期的<span lang="EN-US">JavaScript</span>（译注：这里特定的<span lang="EN-US">JavaScript</span>指的就是包含<span lang="EN-US">OpenAjax Hub</span></span><span style="font-family: 宋体;">的</span><span style="font-family: 宋体;" lang="EN-US">AJAX</span><span style="font-family: 宋体;">运行库的代码）在其他兼容<span lang="EN-US">OpenAjax</span>的运行库之前被加载，那么则没有必要为<span lang="EN-US">OpenAjax.js</span>使用一个单独的<span lang="EN-US">&lt;script&gt;</span>元素。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: 宋体;">要使应用工作，开发者需要注册一个回调函数，当用户在日历组件里选择一个新的日期时调用该函数。这个回调函数接着使用<span lang="EN-US">OpenAjax Hub</span>的<span lang="EN-US">publish()</span>函数传播这个新日期事件：<span lang="EN-US"><o:p></o:p></span></span></p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&lt;</span><span style="color: #000000;">script&nbsp;type</span><span style="color: #000000;">=</span><span style="color: #000000;">&#8221;text</span><span style="color: #000000;">/</span><span style="color: #000000;">javascript&#8221;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<br />
<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
<br />
</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;MyCalendarCallback(<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />)&nbsp;{<br />
<br />
OpenAjax.hub.publish(&#8220;myapp.newdate&#8221;,&nbsp;newdate);<br />
<br />
}<br />
<br />
<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
<br />
</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">script</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
</span></div>
<span style="font-family: 宋体;" lang="EN-US"><o:p>&nbsp;</o:p></span>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: 宋体;">接着开发者需要开发这样一些代码：所有的图表组件和数据网格组件都要订阅这个新日期事件，并要提供一个回调函数。各个回调函数将相应地更新特定的可视化组件：<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: 宋体;" lang="EN-US"><o:p></o:p></span> <br />
</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&lt;</span><span style="color: #000000;">script&nbsp;type</span><span style="color: #000000;">=</span><span style="color: #000000;">&#8221;text</span><span style="color: #000000;">/</span><span style="color: #000000;">javascript&#8221;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<br />
<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
<br />
</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;NewDateCallback(eventname,&nbsp;publisherData,<br />
<br />
subscriberData)&nbsp;{<br />
<br />
<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />更新特定的可视化组件<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
<br />
}<br />
<br />
OpenAjax.hub.subscribe(&#8220;myapp.newdate&#8221;,&nbsp;NewDateCallback);<br />
<br />
<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
<br />
</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">script</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
</span></div>
<span style="font-family: 宋体;" lang="EN-US"><o:p></o:p></span>
<p class="MsoNormal" style="text-align: left;" align="left"><strong><span style="font-family: 宋体;">未来支持<span lang="EN-US">OpenAjax
Hub</span>的工具包<span lang="EN-US"><o:p></o:p></span></span></strong></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: 宋体;" lang="EN-US">OpenAjax</span><span style="font-family: 宋体;">联盟正与工业界一起合作，达到对<span lang="EN-US">OpenAjax Hub</span>的广泛支持。一个特殊的<span lang="EN-US">AJAX</span>工具包可以像下面这样支持<span lang="EN-US">OpenAjax Hub</span>：<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: 宋体;">■ </span><span style="font-family: 宋体;" lang="EN-US">AJAX</span><span style="font-family: 宋体;">工具包可以包含<span lang="EN-US">Hub</span>（最好的方式）。<span lang="EN-US">Hub</span>可以被小于<span lang="EN-US">3K</span>的<span lang="EN-US">JavaScript</span>实现，所以一些<span lang="EN-US">AJAX</span>工具包简单地捆绑<span lang="EN-US">Hub</span>，将它作为它们工具包的一个标准组件。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: 宋体;">■ </span><span style="font-family: 宋体;" lang="EN-US">如果<span lang="EN-US">Hub</span>在运行环境里可用则使用它。其他一些<span lang="EN-US">AJAX</span>工具包可能决定在它们的发布中并不包含<span lang="EN-US">Hub</span>，它们会检查<span lang="EN-US">Hub</span>是否早先已经被加载了，如果已经加载，它们则直接使用<span lang="EN-US">Hub</span>的服务。<span lang="EN-US"><o:p></o:p></span><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: 宋体;">■</span><span style="font-family: 宋体;">第三方的开发者可以开发适配器。对大多数工具包来说，它们可能允许第三方的开发者编写少量的<span lang="EN-US">JavaScript</span>使得自己能够支持<span lang="EN-US">Hub</span>。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: 宋体;">当<span lang="EN-US">AJAX</span>工具包包含内置对<span lang="EN-US">Hub</span>的支持时，应用开发者的工作将更加容易，但是通过查找或编写适配器的方式，<span lang="EN-US">Hub</span>依然可以被那些并未实现支持<span lang="EN-US">Hub</span>的工具包所使用。<span lang="EN-US"><o:p></o:p></span></span></p>
<br />
<br />
<img src ="http://www.blogjava.net/RongHao/aggbug/171978.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/RongHao/" target="_blank">ronghao</a> 2008-01-01 12:57 <a href="http://www.blogjava.net/RongHao/archive/2008/01/01/171978.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自己firefox下js程序向ie兼容遇到的几个问题(2)</title><link>http://www.blogjava.net/RongHao/archive/2007/02/28/101228.html</link><dc:creator>ronghao</dc:creator><author>ronghao</author><pubDate>Wed, 28 Feb 2007 13:53:00 GMT</pubDate><guid>http://www.blogjava.net/RongHao/archive/2007/02/28/101228.html</guid><wfw:comment>http://www.blogjava.net/RongHao/comments/101228.html</wfw:comment><comments>http://www.blogjava.net/RongHao/archive/2007/02/28/101228.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/RongHao/comments/commentRss/101228.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/RongHao/services/trackbacks/101228.html</trackback:ping><description><![CDATA[1.昨天开始在程序里增加和服务器端交互的部分。看看代码<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">var url </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">http://localhost:8080/app/get_data</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">;<br />        var pars </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">''</span><span style="color: rgb(0, 0, 0);">;<br />        <br />        var myAjax </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Ajax.Request(<br />            url, <br />            {<br />                method: </span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">get</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">, <br />                parameters: pars, <br />                onComplete: showResponse<br />            });</span></div>很简单的一段程序，在firefox里始终不能工作，但在ie下一切正常。打开debugger,跟踪调试到这一行<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.transport.open(</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.options.method, </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.url, <br />        </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.options.asynchronous);</span></div><br />在这一行执行出现问题，干掉prototype,自己写XMLHttpRequest，问题同样出现在同一个地方<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">req.open(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">GET</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, url, </span><span style="color: rgb(0, 0, 255);">true</span><span style="color: rgb(0, 0, 0);">);</span></div>ie下正常。于是开始怀疑是firefox自己的问题，firefox可能更多的从安全方面做了考虑，拒绝<span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 0);">http://localhost:8080这种带域名的访问方式。把js程序移到应用程序里，url改为<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">var url </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">/app/get_data</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">;</span></div>问题解决，访问正常。<br />2.点击日历单元格需要弹出一个窗口用于新增工作安排，在firfox里为了方便这样拼写<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">var TR</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">document.createElement(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">tr</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />TR.innnerHTML</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&lt;td&gt;&lt;input <img src="http://www.blogjava.net/images/dot.gif" />&gt;&lt;/td&gt;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;</span></div>firfox下正常，ie显示不出，改为下面方式则问题解决<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">var TR</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">document.createElement(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">tr</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />var TD</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">document.createElement(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">td</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />TD.innnerHTML</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&lt;input <img src="http://www.blogjava.net/images/dot.gif" />&gt;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br />TR.appendChild(TD);</span></div><br /></span><img src ="http://www.blogjava.net/RongHao/aggbug/101228.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/RongHao/" target="_blank">ronghao</a> 2007-02-28 21:53 <a href="http://www.blogjava.net/RongHao/archive/2007/02/28/101228.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自己firefox下js程序向ie兼容遇到的几个问题</title><link>http://www.blogjava.net/RongHao/archive/2007/02/13/99744.html</link><dc:creator>ronghao</dc:creator><author>ronghao</author><pubDate>Tue, 13 Feb 2007 11:07:00 GMT</pubDate><guid>http://www.blogjava.net/RongHao/archive/2007/02/13/99744.html</guid><wfw:comment>http://www.blogjava.net/RongHao/comments/99744.html</wfw:comment><comments>http://www.blogjava.net/RongHao/archive/2007/02/13/99744.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/RongHao/comments/commentRss/99744.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/RongHao/services/trackbacks/99744.html</trackback:ping><description><![CDATA[把firefox下js程序向ie兼容，一直用firefox调试，今天在ie下跑跑遇到了很多问题。<br />1.程序中用到prototype.js，对于事件监听，我一直这样处理<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">Event.observe(job.jobDiv.timeDiv, "mousedown", eway.TimeTableDiv.selectMoveJobDiv);<br /></span><span style="color: rgb(0, 0, 0);"></span></div>在firefox下完全正常，但在ie下就找不到视图所附加的对象了，改回来<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">job.jobDiv.timeDiv.onmousedown</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> eway.TimeTableDiv.selectMoveJobDiv</span></div>这样两个浏览器都可以跑。附一个简单的测试<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">&lt;!</span><span style="color: rgb(255, 0, 255);">DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">html</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">head</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">    <br /></span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">title</span><span style="color: rgb(0, 0, 255);">&gt;&lt;/</span><span style="color: rgb(128, 0, 0);">title</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">script </span><span style="color: rgb(255, 0, 0);">src</span><span style="color: rgb(0, 0, 255);">="lib/prototype/prototype.js"</span><span style="color: rgb(255, 0, 0);"> type</span><span style="color: rgb(0, 0, 255);">="text/javascript"</span><span style="color: rgb(0, 0, 255);">&gt;&lt;/</span><span style="color: rgb(128, 0, 0);">script</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">script</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"><br />window.onload</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);">=</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 255);">function</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);">(){<br />  </span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 255);">var</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"> b</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);">=</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 255);">new</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"> Button(</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);">"</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);">wokao</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);">"</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);">,$('simple'));<br />  }  <br /></span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 255);">function</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"> Button(value,domEl){<br />  </span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 255);">this</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);">.domEl</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);">=</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);">domEl;<br />  </span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 255);">this</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);">.value</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);">=</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);">value;<br />  </span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 255);">this</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);">.domEl.buttonObj</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);">=</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 255);">this</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);">;<br /></span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 128, 0);">//</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 128, 0);">  this.domEl.onclick=this.clickHandler;</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 128, 0);"><br /></span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);">  Event.observe(</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 255);">this</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);">.domEl, </span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);">"</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);">mousedown</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);">"</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);">, </span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 255);">this</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);">.clickHandler);<br />}<br /><br />Button.prototype.clickHandler</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);">=</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 255);">function</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);">(){<br />  </span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 255);">var</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"> buttonObj</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);">=</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 255);">this</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);">.buttonObj;<br />  </span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 255);">var</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"> value</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);">=</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);">(buttonObj </span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);">&amp;&amp;</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"> buttonObj.value) </span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);">?</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"><br />    buttonObj.value : </span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);">"</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);">unknown value</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);">"</span><span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);">;<br />  alert(value);<br />}<br /></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">script</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">div </span><span style="color: rgb(255, 0, 0);">class</span><span style="color: rgb(0, 0, 255);">="resizeMe"</span><span style="color: rgb(255, 0, 0);"> id</span><span style="color: rgb(0, 0, 255);">="simple"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">p</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">This is just a clean DIV</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">p</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">div</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">body</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">html</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span></div>2.处理td的跨行和跨列，都必须这样写<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">td.setAttribute(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">rowSpan</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">);<br />td.setAttribute(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">colSpan</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">);</span></div>注意<span style="color: rgb(0, 0, 0);">rowSpan</span><span style="color: rgb(0, 0, 0);">，</span><span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 0);">colSpan中间字母都是大写的，而写成rowspan,colspan在firefox下是没有任何问题的。<br />3.在拖拽层的时候会出现鼠标经过的文字被选中的现象，解决这个问题非常简单，当你开始拖拽前即你用鼠标点中你想要拖拽的层，这时候对事件进行处理<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">e</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">e</span><span style="color: rgb(0, 0, 0);">||</span><span style="color: rgb(0, 0, 0);">window.event;<br /></span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(e.stopProgation){<br />e.stopPropagation();<br />}<br /></span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);">{<br />e.cancelBubble </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">true</span><span style="color: rgb(0, 0, 0);">;<br />}<br /></span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(e.preventDefault){<br />e.preventDefault();<br />}<br /></span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);">{<br />e.returnValue </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">false</span><span style="color: rgb(0, 0, 0);">;<br />} </span></div><br />如果使用</span>prototype.js，可以简单为一行代码<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">Event.stop(e);</span></div><br /><img src ="http://www.blogjava.net/RongHao/aggbug/99744.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/RongHao/" target="_blank">ronghao</a> 2007-02-13 19:07 <a href="http://www.blogjava.net/RongHao/archive/2007/02/13/99744.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>