代码改变世界

随笔分类 - AJAX

Tangram 前端库通过 Github 开源了

2010-12-24 16:20 by Cat Chen, 8203 阅读, 收藏, 编辑
摘要:Tangram 是百度内部一直在开发和使用的前端库之一,功能与 jQuery 、 Prototype 等库类似,主要功能是简化 DOM 操作,并且扩展 JavaScript 语言。这部分功能准确来说属于 Tangram Core ,另外一个叫做 Tangram Component 的库提供一些类似 YUI 、 Sencha 这个级别的组件。之前 Tangram 说要开源很久了,一直卡在流程上,并且也有人觉得必须把库做得足够好了才好意思拿出来开源。我个人的看法是,跟 John Resig 的一样,前端库应该从第一天开始就开源,因为就算你不开源别人也一样能看到,所以还不如开放出来接受别人的贡献。如 阅读全文

能承载移动 Web 应用的唯一浏览器: Mobile Safari

2010-01-30 14:02 by Cat Chen, 5116 阅读, 收藏, 编辑
摘要:最近拿 iPhone 、 Android 、 Windows Mobile 这三个平台上的内置浏览器来做了一番对比,结果是只有 iPhone 的 Mobile Safari 能够承载现代化的移动 Web 应用,其他移动浏览器的设计思路还停留在上个世纪──能看网页就行,不存在移动应用一说。我用来做对比的平台是 iPhone 2.0 、 Android 2.0 、 Window... 阅读全文

我在 TechEd 2009 演讲的资源 (Silverlight & Ajax)

2009-11-10 11:49 by Cat Chen, 3890 阅读, 收藏, 编辑
摘要:这是TechEd第二天下午的Silverlight课程资源。关于百度Hi的Silverlight实现方面的任何问题,都欢迎与我讨论。基于Silverlight的RIA架构及百度应用View more presentations from Cat Chen.这是TechEd第三天下午ASP.NET 4课程资源。与ASP.NET AJAX 4.0相关的问题可以在此讨论。建站大业,实战ASP.NET 4... 阅读全文

十分钟内学会:控制浏览器是否缓存网页状态

2009-10-09 14:59 by Cat Chen, 7476 阅读, 收藏, 编辑
摘要:Question在Firefox等浏览器中,如果你打开一个页面并进行若干操作,例如在文本框进行输入,甚至点击按钮进行Ajax操作更新页面局部,这些操作的结果都会被缓存下来。在你点击链接离开这个页面后,如果你通过后退按钮回到这个页面,你会发现它仍出于你离开时的状态,而非页面刚刚加载好后的初始状态。在一些情况下,这样的缓存方式是符合我们预期的;但在另外一些情况下,我们更希望页面恢复到初始状态,或者说让... 阅读全文

jQuery is DSL (Part 2 - jQuery)

2009-08-17 00:01 by Cat Chen, 4542 阅读, 收藏, 编辑
摘要:jQuery的Internal DSL形式在上一篇文章里面,我们了解到了Internal DSL的具体形式,形如:/* Method Chaining */computer() .processor() .cores(2) .i386() .disk() .size(150) .disk() .size(75) .speed(7200) .sata() .end();然后我们在看看一段... 阅读全文

jQuery is DSL (Part 1 - DSL)

2009-08-10 23:47 by Cat Chen, 6682 阅读, 收藏, 编辑
摘要:jQuery刚刚出来的时候,我没有太多关注它,觉得这不过是Yet Another JavaScript Library。早期的jQuery专注于DOM节点的筛选与操作,不提供众多的基础类扩展,更不提供UI组件,因此体积能够做到很小。然而,我实在看不出它和我熟悉的Prototype比有什么明显的优势——jQuery能做的各项独立的操作,Prototype都能做。后来用jQue... 阅读全文

让 JavaScript 轻松支持函数重载 (Part 2 - 实现)

2009-07-02 15:51 by Cat Chen, 4296 阅读, 收藏, 编辑
摘要:在上一篇文章里,我们设计了一套能在JavaScript中描述函数重载的方法,这套方法依赖于一个叫做Overload的静态类,现在我们就来看看如何实现这个静态类。识别文本签名我们先来回顾一下上一篇文章中提到的Overload用例: var extend = Overload .add("*, ...", function(target) { }) .add("Boolean, *, ...", ... 阅读全文

让 JavaScript 轻松支持函数重载 (Part 1 - 设计)

2009-07-02 09:18 by Cat Chen, 7376 阅读, 收藏, 编辑
摘要:JavaScript支持重载吗?JavaScript支持函数重载吗?可以说不支持,也可以说支持。说不支持,是因为JavaScript不能好像其它原生支持函数重载的语言一样,直接写多个同名函数,让编译器来判断某个调用对应的是哪一个重载。说支持,是因为JavaScript函数对参数列表不作任何限制,可以在函数内部模拟对函数重载的支持。实际上,在很多著名的开源库当中,我们都可以看到函数内部模拟重载支持的... 阅读全文

写个 JavaScript 异步调用框架 (Part 6 - 实例 & 模式)

2009-07-01 21:59 by Cat Chen, 3892 阅读, 收藏, 编辑
摘要:我们用了5篇文章来讨论如何编写一个JavaScript异步调用框架(问题 & 场景、用例设计、代码实现、链式调用、链式实现),现在是时候让我们看一下在各种常见开发情景中如何使用它了。封装Ajax设计Async.Operation的最初目的就是解决Ajax调用需要传递callback参数的问题,为此我们先把Ajax请求封装为Async.Operation。我在这里使用的是jQuery,当然无... 阅读全文

写个 JavaScript 异步调用框架 (Part 5 - 链式实现)

2009-06-30 23:36 by Cat Chen, 3943 阅读, 收藏, 编辑
摘要:在上一篇文章里面,我们为异步调用框架设计了一种链式调用方式,来增强异步调用队列的代码可读性,现在我们就来编写实现这部分功能的代码。调用入口链式调用存在Async.go方法和Async.chain方法两个入口,这两个入口本质上是一致的,只是Async.chain方法在调用时先不提供初始参数,而Async.go方法在调用时提供了初始参数并启动异步调用链。Async.chain = function()... 阅读全文

写个 JavaScript 异步调用框架 (Part 4 - 链式调用)

2009-05-09 23:46 by Cat Chen, 3606 阅读, 收藏, 编辑
摘要:我们已经实现了一个简单的异步调用框架,然而还有一些美中不足,那就是顺序执行的异步函数需要用嵌套的方式来声明。现实开发中,要按顺序执行一系列的同步异步操作又是很常见的。还是用百度Hi网页版中的例子,我们先要异步获取联系人列表,然后再异步获取每一个联系人的具体信息,而且后者是分页获取的,每次请求发送10个联系人的名称然后取回对应的具体信息。这就是多个需要顺序执行的异步请求。为此,我们需要设计一种新的操... 阅读全文

写个 JavaScript 异步调用框架 (Part 3 - 代码实现)

2009-05-07 14:54 by Cat Chen, 3509 阅读, 收藏, 编辑
摘要:在上一篇文章里,我们说到了要实现一个Async.Operation类,通过addCallback方法传递回调函数,并且通过yield方法返回回调结果。现在我们就来实现这个类吧。类结构首先我们来搭一个架子,把需要用到的似有变量都列出来。我们需要一个数组,来保存回调函数列表;需要一个标志位,来表示异步操作是否已完成;还可以学IAsyncResult,加一个state,允许异步操作的实现者对外暴露自定义... 阅读全文

写个 JavaScript 异步调用框架 (Part 2 - 用例设计)

2009-05-07 01:12 by Cat Chen, 3990 阅读, 收藏, 编辑
摘要:在上一篇文章里说到,我们要设计一个异步调用框架,最好能够统一同步异步调用的接口,同时具体调用顺序与实现方式无关。那么我们现在就来设计这样一个框架的用例。传递回调我们首先要考虑的一个问题是,如何传递回调入口。在最传统的XHR调用当中,回调函数会被作为最后一个参数传递给异步函数:function asyncOperation(argument, callback)在参数相当多的时候,我们可以把参数放到... 阅读全文

写个 JavaScript 异步调用框架 (Part 1 - 问题 & 场景)

2009-05-06 00:18 by Cat Chen, 5259 阅读, 收藏, 编辑
摘要:问题在Ajax应用中,调用XMLHttpRequest是很常见的情况。特别是以客户端为中心的Ajax应用,各种需要从服务器端获取数据的操作都通过XHR异步调用完成。然而在单线程的JavaScript编程中,XHR异步调用的代码风格实在是与一般的JavaScript代码格格不入。额外参数考虑一个除法函数,如果它是纯客户端的同步函数,那么签名会是这样的:function divide(operand1... 阅读全文

ASP.NET AJAX 4.0 Preview 3 (Part 2 - ASP.NET AJAX Template)

2009-03-14 10:43 by Cat Chen, 4712 阅读, 收藏, 编辑
摘要:在上一篇文章里,我们说到了如何使用ADO.NET Data Service Client Library能够轻松访问到存在服务器端的数据,然而将数据展现出来仍需要人手拼接HTML这点就实在是让人难以接受,所以我们现在就来看看如何利用ASP.NET AJAX Template解决这个问题。文章中所用到的示例代码,可以在这里下载:ASP.NET AJAX 4.0 Preview 3 Demo,然后参考... 阅读全文

ASP.NET AJAX 4.0 Preview 3 (Part 1 - ADO.NET Data Service Client Library)

2009-03-11 00:18 by Cat Chen, 4116 阅读, 收藏, 编辑
摘要:自从Microsoft与jQuery合作以来,ASP.NET AJAX与jQuery就被定位为两个互补的AJAX库。既然jQuery已经实现了如此多轻量级的AJAX特性,自然ASP.NET AJAX会继续专注于富客户端所需的一些重量级特性。 在ASP.NET AJAX 4.0 Preview 3里面,开发人员能够接触到的两个重要的新特性就是ADO.NET Data Service Client L... 阅读全文

以服务器端为中心的 ASP.NET AJAX 模式 (Part 2 - Control)

2008-10-30 00:50 by Cat Chen, 4812 阅读, 收藏, 编辑
摘要:在上一篇文章当中,也就是《以服务器端为中心的 ASP.NET AJAX 模式 (Part 1 - Behavior)》,我们探讨了较为易用的Behavior模式。之所以说它较为易用,是因为它不涉及和原有Page处理流程的交互,即使访问网络也是访问独立的Web Service(包括Page上的[WebMethod]),因此和Page处理流程的设计绝对是正交的。但有时候我们需要的就是与Page处理流程... 阅读全文

以服务器端为中心的 ASP.NET AJAX 模式 (Part 1 - Behavior)

2008-10-26 20:33 by Cat Chen, 4656 阅读, 收藏, 编辑
摘要:早在ASP.NET AJAX从CTP转向Beta再转向RTM时,看着客户端的Control被逐步放弃,与此同时ASP.NET AJAX Control Toolkit越来越多地使用Behavior,我就想深入说说ASP.NET AJAX的模式。不过由于我比较懒,所以这个话题只在《理想的 ASP.NET AJAX (Part 2 - Server Centric)》中一笔带过,没有深入讨论。今天看到... 阅读全文

如何动态加载 JavaScript 与 CSS

2008-09-02 23:01 by Cat Chen, 10167 阅读, 收藏, 编辑
摘要:Omar AL Zabir这位MVP总是喜欢搞些稀奇古怪同时又很实用的小东西,并且还十分值得参考。最近他就做了一个叫做ensure的小工具用于动态加载JavaScript、CSS与HTML,而且IE、Firefox、Opera、Safari都支持了,那么我们就来看看ensure是如何做到动态加载JavaScript与CSS的。在介绍ensure内部的实现之前,让我们先来看看其功能:ensure({... 阅读全文

使用 .NET 实现 Ajax 长连接 (Part 2 - Mutex Wait & Signal)

2008-03-08 17:21 by Cat Chen, 8857 阅读, 收藏, 编辑
摘要:在上一次的文章中,我们说到了如何设计一个ASP.NET Web Service来处理长连接请求。很多人对此就提出了问题,如何hold住请求让它30秒不断开了?这其实很简单,只需要Sleep()一下就可以了:Thread.Sleep(30 * 1000);然而问题是,我们不是要等30秒然后看看是否有事件需要返回,而是在这30秒内随时有事件随时返回。因此,我们需要一套机制来在等待的过程中检查是否有事件... 阅读全文