<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_Cat in dotNET_分类_Web</title><id>http://feed.cnblogs.com/blog/u/22107/category/73546/rss</id><updated>2012-05-30T18:32:06Z</updated><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cathsfz/category/73546.html"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/22107/category/73546/rss"/><entry><id>http://www.cnblogs.com/cathsfz/archive/2012/05/09/2493385.html</id><title type="text">怎么样才算是 RESTful？读 REST in Practice</title><summary type="text">最近 O’Reilly 搞活动，我就半价买了一本《REST in Practice》（Kindle 版链接）。对于 O’Reilly 的书，我通常会对比 O’Reilly 打折后的价钱和 Kindle 版的价格，通常是那家更便宜就在那家买，但图表或代码比较多的我就会坚持买 O’Reilly 的版本，因为 PDF 能够最好地保存这些格式。回到 REST 的话题上。尽管这个概念 2000 年就被提出来了，2007 年成为了一个热词，随后越来越多的服务都宣称自己是 RESTful 的，但是到底真么做才是真正的 REST 我从来没有自习学习过。由于 2007 年的时候 Ruby on Rails 也十</summary><published>2012-05-09T14:08:00Z</published><updated>2012-05-09T14:08:00Z</updated><author><name>Cat Chen</name><uri>http://www.cnblogs.com/cathsfz/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cathsfz/archive/2012/05/09/2493385.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cathsfz/archive/2012/05/09/2493385.html"/><content type="html"/></entry><entry><id>http://www.cnblogs.com/cathsfz/archive/2011/07/08/2100839.html</id><title type="text">为什么 script 标签不能写成自关闭形式</title><summary type="text">今天早上在 Stack Overflow 看到了这个问题： Why don't self-closing script tags work? 。答案给出的解释是，在 XHTML 的标准里面规定非 EMPTY 标签不能使用自关闭形式。注意这里使用的是全大写的 EMPTY ，所以我不把它翻译为「空白」。那么 EMPTY 到底是什么呢？写过 DTD 的人应该知道它是个关键字，用来指明一个标签的内容必须是空白，而不能包含文本内容或子节点。看看具体的例子就很容易明白了：&lt;!ELEMENT img EMPTY&gt;&lt;!ATTLIST img %attrs; src %URI; #RE</summary><published>2011-07-08T05:50:00Z</published><updated>2011-07-08T05:50:00Z</updated><author><name>Cat Chen</name><uri>http://www.cnblogs.com/cathsfz/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cathsfz/archive/2011/07/08/2100839.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cathsfz/archive/2011/07/08/2100839.html"/><content type="html"/></entry><entry><id>http://www.cnblogs.com/cathsfz/archive/2011/05/29/2062382.html</id><title type="text">在 JavaScript 中监听 IME 键盘输入事件</title><summary type="text">在 JavaScript 中监听用户的键盘输入是很容易的事情，但用户一旦使用了输入法，问题就变得复杂了。输入法应当如何触发键盘事件呢？是每一下击键都触发一次事件，还是选词完毕才触发事件呢？整句输入又该如何触发事件呢？不同的操作系统和不同的浏览器对此有不同的看法。在最糟糕的情况下，用户使用输入法后浏览器就只触发一次 keydown ，之后就没有任何的键盘事件了。这对于 Suggestion 控件的实现来说是个大问题，因为 Suggestion 控件需要监听文本输入框的变化，而事件是最准确也最节省计算资源的做法，如果换成轮询的话性能就可能受到影响。 首先，要监听启用输入法后的击键事件应当使用 ke</summary><published>2011-05-29T14:26:00Z</published><updated>2011-05-29T14:26:00Z</updated><author><name>Cat Chen</name><uri>http://www.cnblogs.com/cathsfz/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cathsfz/archive/2011/05/29/2062382.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cathsfz/archive/2011/05/29/2062382.html"/><content type="html"/></entry><entry><id>http://www.cnblogs.com/cathsfz/archive/2010/11/23/1884740.html</id><title type="text">John Resig 见面会视频</title><summary type="text">上个星期 John Resig 来到了中国，谋智网络跟 CSDN 组织了一场 John Resig 见面会。 John Resig 在大会上介绍了 jQuery 的两个新特性（暂时还是插件）： Data Link 以及 Templates 。引入这两个插件后，前端的数据呈现及交互将变得更简单，开发数据驱动型 Web 应用的成本也会随之而降低，估计将来我们能够见到更多基于 jQuery 的数据交互型...</summary><published>2010-11-22T16:28:00Z</published><updated>2010-11-22T16:28:00Z</updated><author><name>Cat Chen</name><uri>http://www.cnblogs.com/cathsfz/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cathsfz/archive/2010/11/23/1884740.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cathsfz/archive/2010/11/23/1884740.html"/><content type="html"/></entry><entry><id>http://www.cnblogs.com/cathsfz/archive/2010/11/17/1878851.html</id><title type="text">如何让你的网站支持 IE9 Pinned Site (Part 2 - 实战)</title><summary type="text">该如何展示 IE9 Pinned Site 呢？我可以写一个新的应用，完全是为了展示 Pinned Site 的特性，但这样就像是为了实现这些特性而利用这些特性。所以我想还是升级一个现有的网站好了，这样更能说明 Pinned Site 是如何起到优化用户体验的作用的。我选择了 hack 现在的百度地图。由于 IE9 正式版还没有发布，所以我 hack 的代码暂时也不能发布到线上，只能私下玩玩。在这...</summary><published>2010-11-16T16:02:00Z</published><updated>2010-11-16T16:02:00Z</updated><author><name>Cat Chen</name><uri>http://www.cnblogs.com/cathsfz/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cathsfz/archive/2010/11/17/1878851.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cathsfz/archive/2010/11/17/1878851.html"/><content type="html"/></entry><entry><id>http://www.cnblogs.com/cathsfz/archive/2010/11/16/1878816.html</id><title type="text">如何让你的网站支持 IE9 Pinned Site (Part 1 - 理论)</title><summary type="text">Windows 7 任务栏有何不同自从 Windows 95 开始，任务栏就一直没什么变化，都是一个个长条表示正在运行的应用程序，直到 Windows 7 。 Windows 7 的任务栏发生了巨大的变化，这个变化其实就是更像 Mac OS X 的 Dock 了。无论是否在运行的应用程序，都可以在任务栏上占一个位置，并且这个位置可以固定下来，让用户可以更方便的操作这个应用程序。从此，任务栏由单向地...</summary><published>2010-11-16T11:19:00Z</published><updated>2010-11-16T11:19:00Z</updated><author><name>Cat Chen</name><uri>http://www.cnblogs.com/cathsfz/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cathsfz/archive/2010/11/16/1878816.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cathsfz/archive/2010/11/16/1878816.html"/><content type="html"/></entry><entry><id>http://www.cnblogs.com/cathsfz/archive/2010/01/30/1660004.html</id><title type="text">能承载移动 Web 应用的唯一浏览器： Mobile Safari</title><summary type="text">最近拿 iPhone 、 Android 、 Windows Mobile 这三个平台上的内置浏览器来做了一番对比，结果是只有 iPhone 的 Mobile Safari 能够承载现代化的移动 Web 应用，其他移动浏览器的设计思路还停留在上个世纪──能看网页就行，不存在移动应用一说。我用来做对比的平台是 iPhone 2.0 、 Android 2.0 、 Window...</summary><published>2010-01-30T06:02:00Z</published><updated>2010-01-30T06:02:00Z</updated><author><name>Cat Chen</name><uri>http://www.cnblogs.com/cathsfz/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cathsfz/archive/2010/01/30/1660004.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cathsfz/archive/2010/01/30/1660004.html"/><content type="text">最近拿 iPhone 、 Android 、 Windows Mobile 这三个平台上的内置浏览器来做了一番对比，结果是只有 iPhone 的 Mobile Safari 能够承载现代化的移动 Web 应用，其他移动浏览器的设计思路还停留在上个世纪──能看网页就行，不存在移动应用一说。我用来做对比的平台是 iPhone 2.0 、 Android 2.0 、 Window...</content></entry><entry><id>http://www.cnblogs.com/cathsfz/archive/2009/11/24/1609883.html</id><title type="text">编写 iPhone Friendly 的 Web 应用程序 (Part 7 - 多点触击)</title><summary type="text">这个系列的上一篇文章差不多是两年之前的事情了，在这两年里Mobile Safari并非停滞不前，从iPhone 2.0开始Mobile Safari就加入了对多点触击的支持，现在我们就来看一下我们可以利用它来干什么。相信很多人都看过WPF为Surface设备做的一个简单demo，也就是在桌面上显示若干张照片，你可以通过单点触击拖放，也可以通过多点触击缩放和旋转。这在iPhone上能够做到，甚至在M...</summary><published>2009-11-24T14:33:00Z</published><updated>2009-11-24T14:33:00Z</updated><author><name>Cat Chen</name><uri>http://www.cnblogs.com/cathsfz/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cathsfz/archive/2009/11/24/1609883.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cathsfz/archive/2009/11/24/1609883.html"/><content type="text">这个系列的上一篇文章差不多是两年之前的事情了，在这两年里Mobile Safari并非停滞不前，从iPhone 2.0开始Mobile Safari就加入了对多点触击的支持，现在我们就来看一下我们可以利用它来干什么。相信很多人都看过WPF为Surface设备做的一个简单demo，也就是在桌面上显示若干张照片，你可以通过单点触击拖放，也可以通过多点触击缩放和旋转。这在iPhone上能够做到，甚至在M...</content></entry><entry><id>http://www.cnblogs.com/cathsfz/archive/2009/10/09/1579666.html</id><title type="text">十分钟内学会：控制浏览器是否缓存网页状态</title><summary type="text">Question在Firefox等浏览器中，如果你打开一个页面并进行若干操作，例如在文本框进行输入，甚至点击按钮进行Ajax操作更新页面局部，这些操作的结果都会被缓存下来。在你点击链接离开这个页面后，如果你通过后退按钮回到这个页面，你会发现它仍出于你离开时的状态，而非页面刚刚加载好后的初始状态。在一些情况下，这样的缓存方式是符合我们预期的；但在另外一些情况下，我们更希望页面恢复到初始状态，或者说让...</summary><published>2009-10-09T06:59:00Z</published><updated>2009-10-09T06:59:00Z</updated><author><name>Cat Chen</name><uri>http://www.cnblogs.com/cathsfz/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cathsfz/archive/2009/10/09/1579666.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cathsfz/archive/2009/10/09/1579666.html"/><content type="text">Question在Firefox等浏览器中，如果你打开一个页面并进行若干操作，例如在文本框进行输入，甚至点击按钮进行Ajax操作更新页面局部，这些操作的结果都会被缓存下来。在你点击链接离开这个页面后，如果你通过后退按钮回到这个页面，你会发现它仍出于你离开时的状态，而非页面刚刚加载好后的初始状态。在一些情况下，这样的缓存方式是符合我们预期的；但在另外一些情况下，我们更希望页面恢复到初始状态，或者说让...</content></entry><entry><id>http://www.cnblogs.com/cathsfz/archive/2009/09/17/1568549.html</id><title type="text">你的网站「被兼容」了吗？</title><summary type="text">一般情况下，我们只会讨论我们的网站如何主动兼容某某浏览器，被动地等待浏览器来兼容我们的网站是不切实际的幻想——哪个浏览器会那么伟大，原意主动为一个不兼容的网站而作出改变呢？IE8就是这样一个伟大的浏览器，Microsoft就是一家这样伟大的企业。故事是这样的，我们有一小段JavaScript依赖于userAgent属性，同样是用IE8进行浏览，在测试环境上userAgent...</summary><published>2009-09-17T07:35:00Z</published><updated>2009-09-17T07:35:00Z</updated><author><name>Cat Chen</name><uri>http://www.cnblogs.com/cathsfz/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cathsfz/archive/2009/09/17/1568549.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cathsfz/archive/2009/09/17/1568549.html"/><content type="text">一般情况下，我们只会讨论我们的网站如何主动兼容某某浏览器，被动地等待浏览器来兼容我们的网站是不切实际的幻想——哪个浏览器会那么伟大，原意主动为一个不兼容的网站而作出改变呢？IE8就是这样一个伟大的浏览器，Microsoft就是一家这样伟大的企业。故事是这样的，我们有一小段JavaScript依赖于userAgent属性，同样是用IE8进行浏览，在测试环境上userAgent...</content></entry><entry><id>http://www.cnblogs.com/cathsfz/archive/2009/08/17/1547361.html</id><title type="text">jQuery is DSL (Part 2 - jQuery)</title><summary type="text">jQuery的Internal DSL形式在上一篇文章里面，我们了解到了Internal DSL的具体形式，形如：/* Method Chaining */computer() .processor() .cores(2) .i386() .disk() .size(150) .disk() .size(75) .speed(7200) .sata() .end();然后我们在看看一段...</summary><published>2009-08-16T16:01:00Z</published><updated>2009-08-16T16:01:00Z</updated><author><name>Cat Chen</name><uri>http://www.cnblogs.com/cathsfz/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cathsfz/archive/2009/08/17/1547361.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cathsfz/archive/2009/08/17/1547361.html"/><content type="text">jQuery的Internal DSL形式在上一篇文章里面，我们了解到了Internal DSL的具体形式，形如：/* Method Chaining */computer() .processor() .cores(2) .i386() .disk() .size(150) .disk() .size(75) .speed(7200) .sata() .end();然后我们在看看一段...</content></entry><entry><id>http://www.cnblogs.com/cathsfz/archive/2009/08/10/1543266.html</id><title type="text">jQuery is DSL (Part 1 - DSL)</title><summary type="text">jQuery刚刚出来的时候，我没有太多关注它，觉得这不过是Yet Another JavaScript Library。早期的jQuery专注于DOM节点的筛选与操作，不提供众多的基础类扩展，更不提供UI组件，因此体积能够做到很小。然而，我实在看不出它和我熟悉的Prototype比有什么明显的优势——jQuery能做的各项独立的操作，Prototype都能做。后来用jQue...</summary><published>2009-08-10T15:47:00Z</published><updated>2009-08-10T15:47:00Z</updated><author><name>Cat Chen</name><uri>http://www.cnblogs.com/cathsfz/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cathsfz/archive/2009/08/10/1543266.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cathsfz/archive/2009/08/10/1543266.html"/><content type="text">jQuery刚刚出来的时候，我没有太多关注它，觉得这不过是Yet Another JavaScript Library。早期的jQuery专注于DOM节点的筛选与操作，不提供众多的基础类扩展，更不提供UI组件，因此体积能够做到很小。然而，我实在看不出它和我熟悉的Prototype比有什么明显的优势——jQuery能做的各项独立的操作，Prototype都能做。后来用jQue...</content></entry><entry><id>http://www.cnblogs.com/cathsfz/archive/2009/07/02/1515566.html</id><title type="text">让 JavaScript 轻松支持函数重载 (Part 2 - 实现)</title><summary type="text">在上一篇文章里，我们设计了一套能在JavaScript中描述函数重载的方法，这套方法依赖于一个叫做Overload的静态类，现在我们就来看看如何实现这个静态类。识别文本签名我们先来回顾一下上一篇文章中提到的Overload用例： var extend = Overload .add("*, ...", function(target) { }) .add("Boolean, *, ...", ...</summary><published>2009-07-02T07:51:00Z</published><updated>2009-07-02T07:51:00Z</updated><author><name>Cat Chen</name><uri>http://www.cnblogs.com/cathsfz/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cathsfz/archive/2009/07/02/1515566.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cathsfz/archive/2009/07/02/1515566.html"/><content type="text">在上一篇文章里，我们设计了一套能在JavaScript中描述函数重载的方法，这套方法依赖于一个叫做Overload的静态类，现在我们就来看看如何实现这个静态类。识别文本签名我们先来回顾一下上一篇文章中提到的Overload用例： var extend = Overload .add("*, ...", function(target) { }) .add("Boolean, *, ...", ...</content></entry><entry><id>http://www.cnblogs.com/cathsfz/archive/2009/07/02/1515188.html</id><title type="text">让 JavaScript 轻松支持函数重载 (Part 1 - 设计)</title><summary type="text">JavaScript支持重载吗？JavaScript支持函数重载吗？可以说不支持，也可以说支持。说不支持，是因为JavaScript不能好像其它原生支持函数重载的语言一样，直接写多个同名函数，让编译器来判断某个调用对应的是哪一个重载。说支持，是因为JavaScript函数对参数列表不作任何限制，可以在函数内部模拟对函数重载的支持。实际上，在很多著名的开源库当中，我们都可以看到函数内部模拟重载支持的...</summary><published>2009-07-02T01:18:00Z</published><updated>2009-07-02T01:18:00Z</updated><author><name>Cat Chen</name><uri>http://www.cnblogs.com/cathsfz/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cathsfz/archive/2009/07/02/1515188.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cathsfz/archive/2009/07/02/1515188.html"/><content type="text">JavaScript支持重载吗？JavaScript支持函数重载吗？可以说不支持，也可以说支持。说不支持，是因为JavaScript不能好像其它原生支持函数重载的语言一样，直接写多个同名函数，让编译器来判断某个调用对应的是哪一个重载。说支持，是因为JavaScript函数对参数列表不作任何限制，可以在函数内部模拟对函数重载的支持。实际上，在很多著名的开源库当中，我们都可以看到函数内部模拟重载支持的...</content></entry><entry><id>http://www.cnblogs.com/cathsfz/archive/2009/07/01/1514983.html</id><title type="text">写个 JavaScript 异步调用框架 (Part 6 - 实例 &amp;amp; 模式)</title><summary type="text">我们用了5篇文章来讨论如何编写一个JavaScript异步调用框架（问题 &amp; 场景、用例设计、代码实现、链式调用、链式实现），现在是时候让我们看一下在各种常见开发情景中如何使用它了。封装Ajax设计Async.Operation的最初目的就是解决Ajax调用需要传递callback参数的问题，为此我们先把Ajax请求封装为Async.Operation。我在这里使用的是jQuery，当然无...</summary><published>2009-07-01T13:59:00Z</published><updated>2009-07-01T13:59:00Z</updated><author><name>Cat Chen</name><uri>http://www.cnblogs.com/cathsfz/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cathsfz/archive/2009/07/01/1514983.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cathsfz/archive/2009/07/01/1514983.html"/><content type="text">我们用了5篇文章来讨论如何编写一个JavaScript异步调用框架（问题 &amp; 场景、用例设计、代码实现、链式调用、链式实现），现在是时候让我们看一下在各种常见开发情景中如何使用它了。封装Ajax设计Async.Operation的最初目的就是解决Ajax调用需要传递callback参数的问题，为此我们先把Ajax请求封装为Async.Operation。我在这里使用的是jQuery，当然无...</content></entry><entry><id>http://www.cnblogs.com/cathsfz/archive/2009/06/30/1514339.html</id><title type="text">写个 JavaScript 异步调用框架 (Part 5 - 链式实现)</title><summary type="text">在上一篇文章里面，我们为异步调用框架设计了一种链式调用方式，来增强异步调用队列的代码可读性，现在我们就来编写实现这部分功能的代码。调用入口链式调用存在Async.go方法和Async.chain方法两个入口，这两个入口本质上是一致的，只是Async.chain方法在调用时先不提供初始参数，而Async.go方法在调用时提供了初始参数并启动异步调用链。Async.chain = function()...</summary><published>2009-06-30T15:36:00Z</published><updated>2009-06-30T15:36:00Z</updated><author><name>Cat Chen</name><uri>http://www.cnblogs.com/cathsfz/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cathsfz/archive/2009/06/30/1514339.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cathsfz/archive/2009/06/30/1514339.html"/><content type="text">在上一篇文章里面，我们为异步调用框架设计了一种链式调用方式，来增强异步调用队列的代码可读性，现在我们就来编写实现这部分功能的代码。调用入口链式调用存在Async.go方法和Async.chain方法两个入口，这两个入口本质上是一致的，只是Async.chain方法在调用时先不提供初始参数，而Async.go方法在调用时提供了初始参数并启动异步调用链。Async.chain = function()...</content></entry><entry><id>http://www.cnblogs.com/cathsfz/archive/2009/05/09/1452875.html</id><title type="text">写个 JavaScript 异步调用框架 (Part 4 - 链式调用)</title><summary type="text">我们已经实现了一个简单的异步调用框架，然而还有一些美中不足，那就是顺序执行的异步函数需要用嵌套的方式来声明。现实开发中，要按顺序执行一系列的同步异步操作又是很常见的。还是用百度Hi网页版中的例子，我们先要异步获取联系人列表，然后再异步获取每一个联系人的具体信息，而且后者是分页获取的，每次请求发送10个联系人的名称然后取回对应的具体信息。这就是多个需要顺序执行的异步请求。为此，我们需要设计一种新的操...</summary><published>2009-05-09T15:46:00Z</published><updated>2009-05-09T15:46:00Z</updated><author><name>Cat Chen</name><uri>http://www.cnblogs.com/cathsfz/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cathsfz/archive/2009/05/09/1452875.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cathsfz/archive/2009/05/09/1452875.html"/><content type="text">我们已经实现了一个简单的异步调用框架，然而还有一些美中不足，那就是顺序执行的异步函数需要用嵌套的方式来声明。现实开发中，要按顺序执行一系列的同步异步操作又是很常见的。还是用百度Hi网页版中的例子，我们先要异步获取联系人列表，然后再异步获取每一个联系人的具体信息，而且后者是分页获取的，每次请求发送10个联系人的名称然后取回对应的具体信息。这就是多个需要顺序执行的异步请求。为此，我们需要设计一种新的操...</content></entry><entry><id>http://www.cnblogs.com/cathsfz/archive/2009/05/07/1451937.html</id><title type="text">写个 JavaScript 异步调用框架 (Part 3 - 代码实现)</title><summary type="text">在上一篇文章里，我们说到了要实现一个Async.Operation类，通过addCallback方法传递回调函数，并且通过yield方法返回回调结果。现在我们就来实现这个类吧。类结构首先我们来搭一个架子，把需要用到的似有变量都列出来。我们需要一个数组，来保存回调函数列表；需要一个标志位，来表示异步操作是否已完成；还可以学IAsyncResult，加一个state，允许异步操作的实现者对外暴露自定义...</summary><published>2009-05-07T06:54:00Z</published><updated>2009-05-07T06:54:00Z</updated><author><name>Cat Chen</name><uri>http://www.cnblogs.com/cathsfz/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cathsfz/archive/2009/05/07/1451937.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cathsfz/archive/2009/05/07/1451937.html"/><content type="text">在上一篇文章里，我们说到了要实现一个Async.Operation类，通过addCallback方法传递回调函数，并且通过yield方法返回回调结果。现在我们就来实现这个类吧。类结构首先我们来搭一个架子，把需要用到的似有变量都列出来。我们需要一个数组，来保存回调函数列表；需要一个标志位，来表示异步操作是否已完成；还可以学IAsyncResult，加一个state，允许异步操作的实现者对外暴露自定义...</content></entry><entry><id>http://www.cnblogs.com/cathsfz/archive/2009/05/07/1451200.html</id><title type="text">写个 JavaScript 异步调用框架 (Part 2 - 用例设计)</title><summary type="text">在上一篇文章里说到，我们要设计一个异步调用框架，最好能够统一同步异步调用的接口，同时具体调用顺序与实现方式无关。那么我们现在就来设计这样一个框架的用例。传递回调我们首先要考虑的一个问题是，如何传递回调入口。在最传统的XHR调用当中，回调函数会被作为最后一个参数传递给异步函数：function asyncOperation(argument, callback)在参数相当多的时候，我们可以把参数放到...</summary><published>2009-05-06T17:12:00Z</published><updated>2009-05-06T17:12:00Z</updated><author><name>Cat Chen</name><uri>http://www.cnblogs.com/cathsfz/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cathsfz/archive/2009/05/07/1451200.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cathsfz/archive/2009/05/07/1451200.html"/><content type="text">在上一篇文章里说到，我们要设计一个异步调用框架，最好能够统一同步异步调用的接口，同时具体调用顺序与实现方式无关。那么我们现在就来设计这样一个框架的用例。传递回调我们首先要考虑的一个问题是，如何传递回调入口。在最传统的XHR调用当中，回调函数会被作为最后一个参数传递给异步函数：function asyncOperation(argument, callback)在参数相当多的时候，我们可以把参数放到...</content></entry><entry><id>http://www.cnblogs.com/cathsfz/archive/2009/05/06/1450332.html</id><title type="text">写个 JavaScript 异步调用框架 (Part 1 - 问题 &amp; 场景)</title><summary type="text">问题在Ajax应用中，调用XMLHttpRequest是很常见的情况。特别是以客户端为中心的Ajax应用，各种需要从服务器端获取数据的操作都通过XHR异步调用完成。然而在单线程的JavaScript编程中，XHR异步调用的代码风格实在是与一般的JavaScript代码格格不入。额外参数考虑一个除法函数，如果它是纯客户端的同步函数，那么签名会是这样的：function divide(operand1...</summary><published>2009-05-05T16:18:00Z</published><updated>2009-05-05T16:18:00Z</updated><author><name>Cat Chen</name><uri>http://www.cnblogs.com/cathsfz/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cathsfz/archive/2009/05/06/1450332.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cathsfz/archive/2009/05/06/1450332.html"/><content type="text">问题在Ajax应用中，调用XMLHttpRequest是很常见的情况。特别是以客户端为中心的Ajax应用，各种需要从服务器端获取数据的操作都通过XHR异步调用完成。然而在单线程的JavaScript编程中，XHR异步调用的代码风格实在是与一般的JavaScript代码格格不入。额外参数考虑一个除法函数，如果它是纯客户端的同步函数，那么签名会是这样的：function divide(operand1...</content></entry></feed>
