至今来看,ajax的模式有两种,就是Google模式和.NET模式。
Google模式就是服务器仅仅接收xml和返回xml,其他一切工作都是客户端做。开发的重点在于客户端,然后xmlhttp仅仅用于发送和接收数据,服务器端则是仅处理数据的逻辑,如果把xmlhttp看作"透明代理"的话,那么这个设计就是属于客户端设计了。
.NET模式则刚刚好相反,虽然.NET说是把WebForm当作WinForm开发,但它不是透明掉服务器端而是透明掉客户端,为什么这样说呢?在你不需要JS的时候,你也可以当它是透明掉服务器端,当你需要JS的时候,你就会觉得它是透明掉客户端了--它没有考虑过你要大量运用JS的情况。
Google模式看上去很容易实现,但当你实际操作的时候你就会发现debug的痛苦程度!我甚至用js封装过专门的ajax库了,这个库包括自动创建一个layer浮在最顶动态更新调试信息(或者说是trace),但还是觉得非常痛苦!
.NET模式的痛处则在于JS--用到ajax怎么可能不是大量JS,而这是.NET要避免的问题--.NET希望页面内的所有元素都不是全局存在而是局部存在的,这样的设计才是正交的,如果所有的逻辑都是拥有全局影响的权利,那么.NET建立的一切稳定基础都会被打破,然而JS正是这样做着。.NET成功把HTTP和HTML都对象化了,这依赖于以前ASP就有的Request/Response模型和XHTML DOM模型。然而JS它无法对象化,除非我们能够创造一个JS CodeDOM。
现在Ajax的未来落在了Avalon的身上,Avalon本身就是允许开发者用XAML描述界面并且用.NET描述逻辑,这对于习惯XHTML+JS的Web开发者来说是件好事。然后它也做到了客户端和服务器端语言的统一,而且是统一的CodeDOM。而且MS可以采取一种很好的做法来让.NET开发者适应,就是开发的时候服务器端代码和客户端代码还是混边,还是当作没有B/S之分,然后把你希望在客户端执行的函数前面加一个例如[ClientScript]标记那么该段代码就会在客户端运行,那时不是很美妙的事情?而且这也符合MS的SmartClient战略哦!