创业需要的是勇气;投资需要的是资本;成功需要的是眼光 - Net Fetch Studio - Web开发,网站架构,数据库开发,软件开发
创业需要的是勇气;投资需要的是资本;成功需要的是眼光 - Net Fetch Studio - Web开发,网站架构,数据库开发,软件开发
Ajax应用场景-Ajax适合的应用场合
Ajax不是万能的,在适合的场合使用Ajax,才能充分发挥它的长处,改善系统性能和用户体验,绝不可以为了技术而滥用。Ajax的特点在于异步交互,动态更新web页面,因此它的适用范围是交互较多,频繁读取数据的web应用。现在来看几个Ajax的应用实例,读者可以了解如何使用Ajax技术改进现有的web应用系统。
场景1. 用Ajax进行数据验证
在填写表单内容时,需要保证数据的唯一性(例如新用户注册填写的用户名),因此必须对用户输入的内容进行数据验证。
数据验证通常有两种方式:
一种是直接填写,然后提交表单,这种方式需要将这个页面提交到服务器端进行验证,整个过程不仅时间长而且造成了服务器不必要的负担;
第二种方式是改进了的验证过程,用户可以通过点击相应的验证按钮,打开新窗口查看验证结果,但是这样需要新开一个浏览器窗口或者对话框,还需要专门编写验证的页面,比较耗费系统资源。
而使用Ajax技术,可以由XMLHttpRequest对象发出验证请求,根据返回的HTTP响应判断验证是否成功,整个过程不需要弹出新窗口,也不需要将整个页面提交到服务器,快速而又不加重服务器负担。
场景2.按需取数据
分类树或者树形结构在web应用系统中使用得非常广泛,例如部门结构,文档得分类结构常常使用树形空间呈现。
以前每次对分类树得操作都会引起页面重载,为了避免这种情况出现,一般不采用每次调用后台得方式,而是一次性将分类结果中得数据一次性读取出来并写入数组,然后根据用户的操作,用JavaScript来控制节点的呈现,这样虽然解决了操作响应速度,不重复载入页面以及避免向服务器频繁发送请求的问题,但是如果用户不对分类进行操作或者只对分类树中的一部分数据进行操作的话(这种情况很普遍的),那么读取的数据中就会有相当大的冗余,浪费了用户的资源。特别是在分类结构复杂,数据庞大的情况下,这种弊端就更加明显了。
现在应用Ajax改进分类树的实现机制。在初始化页面时,只获取第一级子分类的数据并且显示;当用户点开一级分类的第一节点时,页面会通过Ajax向服务器请求当前分类所属的二级子分类的所有数据;如果再请求已经呈现的二级分类的某一节点时,再次向服务器请求当前分类所属的三级子分类的所有数据,以此类推。页面会根据用户的操作向服务器请求它所需要的数据,这样就不会存在数据的冗余,减少了数据下载总量。同时,更新页面时不需要重载所有内容,只更新需要更新的那部分内容即可,相对于以前后台处理并且重载的方式,大大缩短了用户的等待时间。
场景3.自动更新页面
在web应用中有很多数据的变化时十分迅速的,例如最新的热点新闻,天气预报以及聊天室内容等。在Ajax出现之前,用户为了即使了解相应的内容必须不断刷新页面,查看是否有新的内容变化,或者页面本身实现定时刷新的功能(大多数聊天室页面就是这样做的)。
有可能会发生这种情况;有一段时间网页的内容没有发生任何变化,但是用户并不知道,仍然不断的刷新页面;或者用户失去了耐心,放弃了刷新页面,却很有可能在此有新的消息出现,这样就错过了第一时间得到消息的机会。
应用Ajax可以改善这种这种情况,页面加载以后,会通过Ajax引擎在后台进行定时的轮询,向服务器发送请求,查看是否有最新的消息。如果有则将新的数据(而不是所有数据)下载并且在页面上进行动态的更新,通过一定的方式通知用户(实现这样的功能正是JavaScript的强项)。
这样即避免了用户不断手工刷新页面的不便,也不会因为重复刷新页面造成资源浪费。
既然你己经对Ajax产生了兴趣,还要知道重要的一点,即什么时候应该使用Ajax技术,而什么时候不该用。首先,不要害怕在应用中尝试新的方法。我们相信.几乎每个web应用都能从Ajax技术中获益,只不过不要矫杠过正,过于离谱就行了。从验证开始就很合适,但是不要限制你的主动性。你当然可以使用Ajax提交数据,但也许不能把它作为提交数据的主要方法。
其次,惟一会影响你应用Ajax的就是浏览器问题。如果大量用户(或者特别重要的用户)还在使用比较旧的浏览器,如IE 5 , Safari 1.2或Mozilla 1.0之前的版本,Ajax技术就不能奏效。如果这是一些很重要的用户,你就要使用针对目标用户的跨浏览器的方法,而放弃Ajax,或者开发一个可以妥善降级的网站。浏览器支持可能不是一个重要因素,因为netscape Navigaxar 4在市场上的份额很小。不过,还是应该查看Web日志,看看你的应用适用什么技术。
如前所述,验证和表单填写就非常适合采用Ajax实现。还可以使用DOM的“拖”技术建立真正动态的网站,如google的个性化主页.
可以看到,Ajax为Web应用开发提供了新的机会。你不会再因为以往的专用技术或技术折中方案而受到妨碍。利用Ajax,胖客户与瘦客户之间的界限不再分明,真正的赢家则是你的用户。
什么是Web2.0?(转)
现在让我全面的来告诉你什么是Web2.0?大家较全面的温故一下Web2.0这个概念!
维基百科(Wikipedia)解释的Web2.0:
引用内容
提出這個概念的O'Reilly和Battelle總結了他們認為的表現了Web 2.0應用特色的一些關鍵原則:
Web 2.0技術基礎比較複雜而且還在演化中,但可以肯定的是包括伺服器端軟體、內容聯合組織、消息協議、基於標準的瀏覽器和各種不同的客戶端應用程序。(一般會避免使用非標準瀏覽器的一些增強功能和外掛程式)這些不同但是互補的方法提供了Web2.0信息存儲、創建和分發的能力,這些能力遠遠超出了先前人們對網站的期望。
如果一個網站使用了以下一些技術作為特色的話,就說他是利用了Web 2.0技術:
Web 2.0在技術方面的表现:
Web 2.0通用概念:
或许是Wikipedia的太过专业或者说跟大众关注的层面不太一样吧,以致于我没有完全参透一些他们想要表达的意思.今天BAIDU了一下,发现SOHU有一个很详细的关于Web2.0的专题,这里面就很贴近一般受众的思维习惯,也更容易被接受了..
什么是Web2.0?
引用内容
2、Web1.0到Web2.0的转变,具体的说,从模式上是单纯的“读”向“写”、“共同建设”发展;由被动地接收互联网信息向主动创造互联网信息迈进!从基本构成单元上,是由“网页”向“发表/记录的信息”发展;从工具上,是由互联网浏览器向各类浏览器、rss阅读器等内容发展;运行机制上,由“Client Server”向“Web Services”转变;作者由程序员等专业人士向全部普通用户发展;应用上由初级的“滑稽”的应用向全面大量应用发展。
3、关于WEB2.0的价值和意义现在比较普遍的说法是它为用户带来了真正的个性化、去中心化和信息自主权,在实际应用中除了原先的IM、P2P等得到新的发展,更是涌现出了很多社会化的新事物,比如Blog,RSS,WIKI,SNS交友网络等。
利用XMLHTTP检测URL及探测服务器信息
利用XMLHTTP检测或监测URL,确认某个网页或网站是否可以正常访问?
如何利用XMLHTTP探测服务器信息?检测网页
Microsoft XML Version 2.0 (C:\Winnt\System32\msxml.dll)
程序代码
Private XmlHTTP As New XMLHTTPRequest
Private vUrl As String
Private vNumber As String
Private vDescription As String
Private vSource As String
Public Sub Connect()
On Error GoTo ErrorHandle:
XmlHTTP.Open "Get", Url, False
XmlHTTP.send
ErrorHandle:
Call GetErrorHeadle(XmlHTTP)
End Sub
Private Sub GetErrorHeadle(ByRef XmlHTTP As XMLHTTPRequest)
If XmlHTTP.readyState <> 4 Then
Exit Sub
End If
If XmlHTTP.Status = 404 Then
Number = "404"
Description = "该网页不存在"
ElseIf XmlHTTP.Status < 200 Then
Number = XmlHTTP.Status
Description = "客户端错误,信息:" & CStr(XmlHTTP.Status) & " " & XmlHTTP.statusText
ElseIf XmlHTTP.Status < 300 Then
Number = XmlHTTP.Status
Description = "成功,该网页能访问。"
ElseIf XmlHTTP.Status < 400 Then
Number = XmlHTTP.Stauts
Description = "重定向,信息:" & CStr(XmlHTTP.Status) & " " & XmlHTTP.statusText
ElseIf XmlHTTP.Status < 500 Then
Number = XmlHTTP.Status
Description = "客户端错误,信息:" & CStr(XmlHTTP.Status) & " " & XmlHTTP.statusText
ElseIf XmlHTTP.Status < 600 Then
Number = XmlHTTP.Status
Description = "服务器错误,信息:" & CStr(XmlHTTP.Status) & " " & XmlHTTP.statusText
Else
Number = XmlHTTP.Status
Description = "域名不可用或网络连接错误,信息:" & CStr(XmlHTTP.Status) & " " & XmlHTTP.statusText
End If
If XmlHTTP.Status < 600 Then Call GetHTTPServer
End Sub
Private Sub GetHTTPServer()
Dim XmlServer As String
XmlServer = XmlHTTP.getResponseHeader("Server")
If XmlServer <> "" Then
Source = Source & "HTTP服务器:" & XmlServer
End If
Source = Source & "所有反馈信息:" & XmlHTTP.getAllResponseHeaders
End Sub
Public Property Get Number() As String
Number = vNumber
End Property
Public Property Let Number(ByVal Val As String)
vNumber = Val
End Property
Public Property Get Description() As String
Description = vDescription
End Property
Public Property Let Description(ByVal Val As String)
vDescription = Val
End Property
Public Property Get Url() As String
Url = vUrl
End Property
Public Property Let Url(ByVal Val As String)
vUrl = Val
End Property
Public Property Get Source() As String
Source = vSource
End Property
Private Property Let Source(ByVal Val As String)
vSource = Val
End Property
Ajax跨域工具: Modello.ajax
Ajax与系列精华Javascript库(Modello)
Ajax的缺点
什么是Web 2.0?What Is Web 2.0?(翻译)
Web 2.0的设计模式
Css让文字自适应Table宽度
IIS监控-IIS监控器(IIS Watcher)
Apache与IIS的优劣对比
利用XMLHTTP检测URL及探测服务器信息
AJAX乱码解决 Ajax跨域工具: Modello.ajax Ajax与系列精华Javascript库(Modello) “创建一个成功的企业的最好办法就是帮助别人赚钱。”Topix.net的Rich Skrenta解释AOL的政策时说到 Ajax应用场景-Ajax适合的应用场合 什么是Web2.0?(转) 利用XMLHTTP检测URL及探测服务器信息 AJAX乱码解决 Ajax跨域工具: Modello.ajax Ajax与系列精华Javascript库(Modello) “创建一个成功的企业的最好办法就是帮助别人赚钱。”Topix.net的Rich Skrenta解释AOL的政策时说到
用过AJAX的朋友肯定知道javascript是使用UTF-8国际编码,即每个汉字用4个字节来存储,但是这就造成了用AJAX来send数据的时候出现乱码。
Ajax乱码产生主要有2个原因
1. xtmlhttp 返回的数据默认的字符编码是utf-8,如果前台页面是gb2312或者其它编码数据就会产生乱码
2. post方法提交数据默认的字符编码是utf-8,如果后台是gb2312或其他编码数据就会产生乱码
一、使用encodeURIComponent加上修改 Content-Type 为 application/x-www-form-urlencoded" 来把数据统一编码成 url 格式,但是这样做有一个弊端,就是太大的数据往往会出错。
二、是通过vbscript 的写的函数把数据转成gb2312格式的,我个人觉得这种方法比较好。有兴趣的朋友可以到网上去查一下。
三、客户端、服务器端全部采用Utf-8编码,且url发送中文字采用escape编码,unescape解码。而且效率高,而且符合目前的形式,utf-8编码本身就是一种比较优秀的编码。
今天突发奇想,AJAX调用的时候会不会发送cookie 呢?马上写了一个程序测试一下,果然能,这样就可以在调用ajax之前,先把数据通过javascript写到cookie里,然后再send就可以将cookie里的数据发送出去了,太爽了!!
演示地址:http://cn5.cn/ajax/ajax12.htm
客户端代码 ajax.htm
程序代码
<script>
var oDiv
var xh
function getXML()
{
setcookie($('name').value,$('val').value);
oDiv = document.all.m
oDiv.innerHTML = "正在装载,请稍侯……."
oDiv.style.display= ""
xh = new ActiveXObject("Microsoft.XMLHTTP")
xh.onreadystatechange = getReady
xh.open("POST","a.php",false)
xh.send();
}
function getReady()
{
if(xh.readyState==4)
{
if(xh.status==200)
{
oDiv.innerHTML = "完成"
}
else
{
oDiv.innerHTML = "抱歉,装载数据失败。原因:" + xh.statusText
}
}
} //author : longbill www.longbill.cn
function setcookie(name,value)
{
var cookiestr=name+"="+value+";";
var expires = "";
var cookieexp=60*60*1000;
var d = new Date();
d.setTime( d.getTime() + cookieexp);
expires = "expires=" + d.toGMTString()+";";
document.cookie = cookiestr+ expires;
}
function $(a)
{
return document.getElementById(a);
}
</script>
<body>
AJAX使用cookie传值例子:<br/>
<form name=myform>
name:<input id=name value="变量名甚至可以是中文" size=20><br/>
value:<input type=text size=20 id=val value=这里><br/>
<input onclick="getXML()" type="button" value="送出数据">
<input onclick="if(xh && xh.responseText) {alert(xh.responseText);}" type="button" value="显示返回结果"><br/>
<div id=m bgcolor=blue>在此显示状态</div>
<input type=button onclick="alert(document.cookie)" value=显示本地COOKIE>
</form>
服务器端代码 a.php
程序代码
Header("Content-type: text/html;charset=GB2312
问题
Ajax是个好东西,但使用起来却不是那么方便。问题总结如下:
前两个问题可以通过封装 XMLHTTPRequest 对象来解决,第三个问题的解决方法有很多中,兼容性和移植性比较好的就是在本域服务器上放置一个中转 proxy 。Modello.ajax 就是提供这套解决方案的工具集。
安装
下载Modello 和 Mdello.ajax
解压并将 modello.js, modello.ajax.js, jsproxy.php 这三个文件放到你的服务器任意文档目录中
在 html 页面中包含 modello.js 和 modello.ajax.js 这两个脚本文件
urlget 方法
Modello.ajax 使用起来非常的简单,请看下面例子:
程序代码
Define('URLGET_PROXY', '/jsproxy.php');
// 强大的 urlget 方法
var urlget = Class.get('modello.ajax.Urllib').urlget;
var url = '…';
// 同步 GET 方法获取
var response = urlget(url);
// 同步 POST 方法获取
var data = '…';
var response = urlget(url, data);
// 异步 POST 方法获取
var callback = function (response) {
// …
}
var ret = urlget(url, data, callback);
// 设置请求头部
var headers = ["User-Agent: Modello.ajax's urlget"];
var ret = urlget(url, data, callback, headers);
// 使用命名通道
var chunnel = '…';
var ret = urlget(url, data, callback, headers, chunnel);
// 使用 Response 对象
if (response.getStatus() == 200) {
alert(response.getText());
}// 设置跨域中转 proxy 路径
Define('URLGET_PROXY', '/jsproxy.php');
// 强大的 urlget 方法
var urlget = Class.get('modello.ajax.Urllib').urlget;
var url = '…';
// 同步 GET 方法获取
var response = urlget(url);
// 同步 POST 方法获取
var data = '…';
var response = urlget(url, data);
// 异步 POST 方法获取
var callback = function (response) {
// …
}
var ret = urlget(url, data, callback);
// 设置请求头部
var headers = ["User-Agent: Modello.ajax's urlget"];
var ret = urlget(url, data, callback, headers);
// 使用命名通道
var chunnel = '…';
var ret = urlget(url, data, callback, headers, chunnel);
// 使用 Response 对象
if (response.getStatus() == 200) {
alert(response.getText());
}
urlget 各个参数的解释如下:
url:目标资源的 URL 地址。
Data:POST 数据。如果 data 为空,则使用 GET 方法获取。
Callback:异步获取回调函数。如果 callback 为空,则使用同步获取。
Headers:附加请求头部。这是一个数组,每一项为字符串,设置一行头部,字符串末尾不可以带回车换行。
Chunnel:命名通道。用于重用某个连接通道。
Urlget 的返回值:
如果是同步获取,成功返回 Response 对象,失败返回 false。如果是异步获取,成功返回 true,并且在获取后调用回调函数,失败返回 false。如果指定了命名通道,但该通道正在被其它请求占用,同步、异步都统一返回 false。
回调函数的参数:
response:Response 对象。
Chunnel:调用时指定的命名通道。
Response 对象
Response 对象用于访问响应的各个数据项。它提供接口如下:
response.getStatus(); // HTTP 响应码(整数)
response.getStatusText(); // 响应码的字面解释
response.getHeader(key); // 由 key 指定的响应的头部数据
response.getAllHeaders(); // 响应的所有头部数据(不包含状态行)
response.getRawHeader(); // 响应的原样头部数据(包含状态行)
response.getText(); // 响应的体部数据
response.getXML(); // 响应的体部数据格式化为 Xml Document 对象response.getStatus(); // HTTP 响应码(整数)
response.getStatusText(); // 响应码的字面解释
response.getHeader(key); // 由 key 指定的响应的头部数据
response.getAllHeaders(); // 响应的所有头部数据(不包含状态行)
response.getRawHeader(); // 响应的原样头部数据(包含状态行)
response.getText(); // 响应的体部数据
response.getXML(); // 响应的体部数据格式化为
声明:以下推荐的类均来自互联网的开源项目,版权所有属于原作者。
引用内容
到目前为止,JavaScript 是一种不完全支持面向对象特性的脚本语言。之所以这样说是因为 JavaScript 的确支持对象的概念,在程序中我们看到都是对象,可是 Javascipt 并不支持类的封装和继承。JavaScript 的确支持自定义对象和继承,不过使用的是另外一种方式:prototype(中文译作:原型)。用过 JavaScript 的或者读过《设计模式》的读者都会了解这种技术,描述如下:
每个对象都包含一个 prototype 对象,当向对象查询一个属性或者请求一个方法的时候,运行环境会先在当前对象中查找,如果查找失败则查找其 prototype 对象。注意 prototype 也是一个对象,于是这种查找过程同样适用在对象的 prototype 对象中,直到当前对象的 prototpye 为空。
在 JavaScript 中,对象的 prototype 在运行期是不可见的,只能在定义对象的构造函数时,创建对象之前设定。
使用 Modello 编写的类所具备如下特性:
Modello 还具有以下特性:
使用 Modello 编写的类功能可以媲美使用 Atlas 编写的类,并且使用起来更简洁。如果你想用 Modello 框架代替 prototype.js 中的简单类框架,只需要先包含 modello.js,然后去掉 prototype.js 中定义 Class 的几行代码即可,一切将正常运行。
Modello
Modello 的完整参考说明和下载地址:http://modello.sourceforge.net/
JavaScript Class Framework
Modello is a lightweight framework that enables you to write JavaScript class like other class-based object-oriented programming language. It introduces class, class-based inheritance, multi-inheritance, private members, RTTI and more into JavaScript. Modello can help you write more readable, reusable and maintainable JavaScript code.
Modello
Modello下载: http://sourceforge.net/project/showfiles.php?group_id=164137&package_id=185772
Modello.ajax
跨域Ajax工具
Ajax是个好东西,但使用起来却不是那么方便。问题总结如下:
前两个问题可以通过封装 XMLHTTPRequest 对象来解决,第三个问题的解决方法有很多中,兼容性和移植性比较好的就是在本域服务器上放置一个中转 proxy 。Modello.ajax 就是提供这套解决方案的工具集。
Modello.ajax下载: http://sourceforge.net/project/showfiles.php?group_id=164137&package_id=187232
ColorCode
代码着色,多语言高亮,使用极为简单
ColorCode官方网址:http://www.ajaxwing.com/colorcode/
Multi-Language Syntax Highlighter
ColorCode is a multi-language syntax source code highlighter. It is designed to be very easy to use and extend. There is two parts in ColorCode: client-side script and back-end render. You can redefine the color scheme in client-side vias changing the CSS file, and you can also define a new syntax for the language which ColorCode does not support. ColorCode use PEAR's Text_Highlighter as it's back-end render, and supports 14 languages syntax:
c++, css, diff, dtd, html, java, javascript, mysql, perl, php, python, ruby, sql, xml
Usage
First, include modello.js, ajax.js, colorcode.js and colorcode.css into your html page. Second, define COLORCODE_BACK_END macro. Third, create and ColorCode object and call it's apply() function. And then use textarea tag to wrap the code that need to be rendered with ColorCode.
ColorCode下载:http://www.ajaxwing.com/download/colorcode.zip
Nifty Corners Cube
JavaScript 圆角(斜角)矩形,同样使用起来也很快捷。
Nifty Corners Cube官方网址:
“我上许多的新闻网站,因为我不相信其中任何一个。”17岁的Sean这么解释他如何阅读在线新闻的。
“当你上了大学以后,Myspace就算不上什么了”高中毕业生18岁的Sasha说。
“在你发展的过程中建造,学习和犯错–你将会在做事情的过程中学到更多,而不是在你做这件事情之前。”37Signals的Jason Fried,他拥护迭代开发模式(iterative development)。
“在5到10年内,媒体的价值将存在于那些培养用户的公司,而不是那些控制内容的公司。”Kleiner Perkins的前任合伙人Vinod Khosla说。
“对我而言,透明度是一件具有竞争性的武器。”Sun微系统公司的CEO Jonathan Schwartz这么解释自己为什么写Blog。
“Ebay有1.5亿的用户,理想的来说,就是1.5亿个人学会了如何相信陌生人。”Ebay的创始人Pierre Omidyar认为商业能为积极的社会变革带来动力。
“我最喜欢Google,因为他们最干净。其他的网站则试图将你的注意力带走。去那些网站不会有任何收获。”18岁的Sasha这么解释为什么适应用户习惯比起强迫他们去适应你要来的聪明的多。
“我们的成功与我们的总裁们的‘好主意’一点关系没有。”Google创始人Sergey Brin更喜欢群体的智慧。
“我们96%的时间里不知道自己在做什么。”Flickr的创始人Stewart Butterfield认为剩下的4%足以让许多人非常快乐了。
“雇用律师起诉对于那些普通公司来说,比起自己创意要简单的多”前任FCC的主席Michael Powell解释为什么那些提供内容服务的公司起诉他们的顾客。
“我告诉我的工程师,不管你有多么聪明,在公司外有着更多比你聪明的人,所以我们需要提供给他们工具,让他们创新。”Omidyar也喜欢群体的智慧。
“传统上,人们认为越多越好。多的也许能行,但是它将会是痛苦、昂贵和冰冷的。看看那些一条路走到黑的人,无法与别人竞争。”Fried创造了几个新词。
证明这个世界与原始的数码时代完全不同:假设你要买一个CD机,你要到哪去买?17岁的Sean困惑的说:“CD机是什么?”
“你给一个公司越多的钱,他们越不可能成功。”Khosla说。
“一般的消费者并不知道浏览器、互联网以及搜索框之间的区别。”Mozilla基金会的Mitchell Baker提供了这样的观点。
“我们认为任何来参加演唱会的人都是平等的,他们都参与到音乐的创作之中。”Grateful Dead乐队的Mickey Hart说道。
“我们成功第一的要素是运气。我们跟随着自己内心而选择了搜索,因为它既有用也有趣。”Brin这么解释如何创立Google。
阅读本站更多与 Web 2.0,Ajax 相关的文章:
Web 2.0 编程思想:16条法则(Dion Hinchcliffe)
Ajax与系列精华Javascript库(Modello)
什么是Web 2.0?What Is Web 2.0?(翻译)
Web 2.0的设计模式
AJAXPatterns网站对现有AJAX框架做总结
CSS中的滑动门技术
从Gmail认识的W3C网页标准和Ajax
AJAX:开发者新的技术天地介绍
XML与XML 命名空间(Namespaces)
IBM发布AJAX Toolkit Framework
Ajax不是万能的,在适合的场合使用Ajax,才能充分发挥它的长处,改善系统性能和用户体验,绝不可以为了技术而滥用。Ajax的特点在于异步交互,动态更新web页面,因此它的适用范围是交互较多,频繁读取数据的web应用。现在来看几个Ajax的应用实例,读者可以了解如何使用Ajax技术改进现有的web应用系统。
场景1. 用Ajax进行数据验证
在填写表单内容时,需要保证数据的唯一性(例如新用户注册填写的用户名),因此必须对用户输入的内容进行数据验证。
数据验证通常有两种方式:
一种是直接填写,然后提交表单,这种方式需要将这个页面提交到服务器端进行验证,整个过程不仅时间长而且造成了服务器不必要的负担;
第二种方式是改进了的验证过程,用户可以通过点击相应的验证按钮,打开新窗口查看验证结果,但是这样需要新开一个浏览器窗口或者对话框,还需要专门编写验证的页面,比较耗费系统资源。
而使用Ajax技术,可以由XMLHttpRequest对象发出验证请求,根据返回的HTTP响应判断验证是否成功,整个过程不需要弹出新窗口,也不需要将整个页面提交到服务器,快速而又不加重服务器负担。
场景2.按需取数据
分类树或者树形结构在web应用系统中使用得非常广泛,例如部门结构,文档得分类结构常常使用树形空间呈现。
以前每次对分类树得操作都会引起页面重载,为了避免这种情况出现,一般不采用每次调用后台得方式,而是一次性将分类结果中得数据一次性读取出来并写入数组,然后根据用户的操作,用JavaScript来控制节点的呈现,这样虽然解决了操作响应速度,不重复载入页面以及避免向服务器频繁发送请求的问题,但是如果用户不对分类进行操作或者只对分类树中的一部分数据进行操作的话(这种情况很普遍的),那么读取的数据中就会有相当大的冗余,浪费了用户的资源。特别是在分类结构复杂,数据庞大的情况下,这种弊端就更加明显了。
现在应用Ajax改进分类树的实现机制。在初始化页面时,只获取第一级子分类的数据并且显示;当用户点开一级分类的第一节点时,页面会通过Ajax向服务器请求当前分类所属的二级子分类的所有数据;如果再请求已经呈现的二级分类的某一节点时,再次向服务器请求当前分类所属的三级子分类的所有数据,以此类推。页面会根据用户的操作向服务器请求它所需要的数据,这样就不会存在数据的冗余,减少了数据下载总量。同时,更新页面时不需要重载所有内容,只更新需要更新的那部分内容即可,相对于以前后台处理并且重载的方式,大大缩短了用户的等待时间。
场景3.自动更新页面
在web应用中有很多数据的变化时十分迅速的,例如最新的热点新闻,天气预报以及聊天室内容等。在Ajax出现之前,用户为了即使了解相应的内容必须不断刷新页面,查看是否有新的内容变化,或者页面本身实现定时刷新的功能(大多数聊天室页面就是这样做的)。
有可能会发生这种情况;有一段时间网页的内容没有发生任何变化,但是用户并不知道,仍然不断的刷新页面;或者用户失去了耐心,放弃了刷新页面,却很有可能在此有新的消息出现,这样就错过了第一时间得到消息的机会。
应用Ajax可以改善这种这种情况,页面加载以后,会通过Ajax引擎在后台进行定时的轮询,向服务器发送请求,查看是否有最新的消息。如果有则将新的数据(而不是所有数据)下载并且在页面上进行动态的更新,通过一定的方式通知用户(实现这样的功能正是JavaScript的强项)。
这样即避免了用户不断手工刷新页面的不便,也不会因为重复刷新页面造成资源浪费。
既然你己经对Ajax产生了兴趣,还要知道重要的一点,即什么时候应该使用Ajax技术,而什么时候不该用。首先,不要害怕在应用中尝试新的方法。我们相信.几乎每个web应用都能从Ajax技术中获益,只不过不要矫杠过正,过于离谱就行了。从验证开始就很合适,但是不要限制你的主动性。你当然可以使用Ajax提交数据,但也许不能把它作为提交数据的主要方法。
其次,惟一会影响你应用Ajax的就是浏览器问题。如果大量用户(或者特别重要的用户)还在使用比较旧的浏览器,如IE 5 , Safari 1.2或Mozilla 1.0之前的版本,Ajax技术就不能奏效。如果这是一些很重要的用户,你就要使用针对目标用户的跨浏览器的方法,而放弃Ajax,或者开发一个可以妥善降级的网站。浏览器支持可能不是一个重要因素,因为netscape Navigaxar 4在市场上的份额很小。不过,还是应该查看Web日志,看看你的应用适用什么技术。
如前所述,验证和表单填写就非常适合采用Ajax实现。还可以使用DOM的“拖”技术建立真正动态的网站,如google的个性化主页.
可以看到,Ajax为Web应用开发提供了新的机会。你不会再因为以往的专用技术或技术折中方案而受到妨碍。利用Ajax,胖客户与瘦客户之间的界限不再分明,真正的赢家则是你的用户。
Tags - AJAX , 应用 , 开发
现在让我全面的来告诉你什么是Web2.0?大家较全面的温故一下Web2.0这个概念!
维基百科(Wikipedia)解释的Web2.0:
提出這個概念的O'Reilly和Battelle總結了他們認為的表現了Web 2.0應用特色的一些關鍵原則:
·將Web作為平臺;
·駕馭群體智慧
·資料將變成未來的「Intel Inside」;
·軟體不斷發行與升級的循環將會終結(「永久的Beta版」)
·輕量型程序設計模型;
·通過內容和服務的聯合使輕量的業務模型可行;
·軟體執行將跨越單一設備
·豐富的使用者體驗
·分享和參與的架構所驅動的網路效應;
·通過帶動分散的、獨立的開發者把各個系統和網站組合形成大彙集的改革;
·拉動長尾的能力;
·快速的反應與功能新增
·雙向的互動
Web 2.0技術基礎比較複雜而且還在演化中,但可以肯定的是包括伺服器端軟體、內容聯合組織、消息協議、基於標準的瀏覽器和各種不同的客戶端應用程序。(一般會避免使用非標準瀏覽器的一些增強功能和外掛程式)這些不同但是互補的方法提供了Web2.0信息存儲、創建和分發的能力,這些能力遠遠超出了先前人們對網站的期望。
如果一個網站使用了以下一些技術作為特色的話,就說他是利用了Web 2.0技術:
Web 2.0在技術方面的表现:
·CSS, 語義化有效的XHTML標記,和Microformats
·不突出的豐富應用技術(例如Ajax)
·數據的聯合,RSS/ATOM
·RSS/ATOM數據的聚合
·規則且有意義的URL
·支持對網誌發帖子
·REST或者是XML Web服務API
·某些社會性網路方面
Web 2.0通用概念:
·網站不能是封閉的——它必須可以很方便地被其他系統獲取或寫入數據。
·用戶應該在網站上擁有他們自己的數據。
·完全地基於Web —— 大多數成功的Web 2.0網站可以幾乎完全通過瀏覽器來使用
或许是Wikipedia的太过专业或者说跟大众关注的层面不太一样吧,以致于我没有完全参透一些他们想要表达的意思.今天BAIDU了一下,发现SOHU有一个很详细的关于Web2.0的专题,这里面就很贴近一般受众的思维习惯,也更容易被接受了..
什么是Web2.0?
2、Web1.0到Web2.0的转变,具体的说,从模式上是单纯的“读”向“写”、“共同建设”发展;由被动地接收互联网信息向主动创造互联网信息迈进!从基本构成单元上,是由“网页”向“发表/记录的信息”发展;从工具上,是由互联网浏览器向各类浏览器、rss阅读器等内容发展;运行机制上,由“Client Server”向“Web Services”转变;作者由程序员等专业人士向全部普通用户发展;应用上由初级的“滑稽”的应用向全面大量应用发展。
3、关于WEB2.0的价值和意义现在比较普遍的说法是它为用户带来了真正的个性化、去中心化和信息自主权,在实际应用中除了原先的IM、P2P等得到新的发展,更是涌现出了很多社会化的新事物,比如Blog,RSS,WIKI,SNS交友网络等。
Tags - WEB2.0 , WEB , 什么是WEB2.0 , WIKIPEDIA
利用XMLHTTP检测或监测URL,确认某个网页或网站是否可以正常访问?
如何利用XMLHTTP探测服务器信息?检测网页
Microsoft XML Version 2.0 (C:WinntSystem32msxml.dll)
Private XmlHTTP As New XMLHTTPRequest
Private vUrl As String
Private vNumber As String
Private vDescription As String
Private vSource As String
Public Sub Connect()
On Error GoTo ErrorHandle:
XmlHTTP.Open \"Get\", Url, False
XmlHTTP.send
ErrorHandle:
Call GetErrorHeadle(XmlHTTP)
End Sub
Private Sub GetErrorHeadle(ByRef XmlHTTP As XMLHTTPRequest)
If XmlHTTP.readyState <> 4 Then
Exit Sub
End If
If XmlHTTP.Status = 404 Then
Number = \"404\"
Description = \"该网页不存在\"
ElseIf XmlHTTP.Status < 200 Then
Number = XmlHTTP.Status
Description = \"客户端错误,信息:\" & CStr(XmlHTTP.Status) & \" \" & XmlHTTP.statusText
ElseIf XmlHTTP.Status < 300 Then
Number = XmlHTTP.Status
Description = \"成功,该网页能访问。\"
ElseIf XmlHTTP.Status < 400 Then
Number = XmlHTTP.Stauts
Description = \"重定向,信息:\" & CStr(XmlHTTP.Status) & \" \" & XmlHTTP.statusText
ElseIf XmlHTTP.Status < 500 Then
Number = XmlHTTP.Status
Description = \"客户端错误,信息:\" & CStr(XmlHTTP.Status) & \" \" & XmlHTTP.statusText
ElseIf XmlHTTP.Status < 600 Then
Number = XmlHTTP.Status
Description = \"服务器错误,信息:\" & CStr(XmlHTTP.Status) & \" \" & XmlHTTP.statusText
Else
Number = XmlHTTP.Status
Description = \"域名不可用或网络连接错误,信息:\" & CStr(XmlHTTP.Status) & \" \" & XmlHTTP.statusText
End If
If XmlHTTP.Status < 600 Then Call GetHTTPServer
End Sub
Private Sub GetHTTPServer()
Dim XmlServer As String
XmlServer = XmlHTTP.getResponseHeader(\"Server\")
If XmlServer <> \"\" Then
Source = Source & \"HTTP服务器:\" & XmlServer
End If
Source = Source & \"所有反馈信息:\" & XmlHTTP.getAllResponseHeaders
End Sub
Public Property Get Number() As String
Number = vNumber
End Property
Public Property Let Number(ByVal Val As String)
vNumber = Val
End Property
Public Property Get Description() As String
Description = vDescription
End Property
Public Property Let Description(ByVal Val As String)
vDescription = Val
End Property
Public Property Get Url() As String
Url = vUrl
End Property
Public Property Let Url(ByVal Val As String)
vUrl = Val
End Property
Public Property Get Source() As String
Source = vSource
End Property
Private Property Let Source(ByVal Val As String)
vSource = Val
End Property
Ajax跨域工具: Modello.ajax
Ajax与系列精华Javascript库(Modello)
Ajax的缺点
什么是Web 2.0?What Is Web 2.0?(翻译)
Web 2.0的设计模式
Css让文字自适应Table宽度
IIS监控-IIS监控器(IIS Watcher)
Apache与IIS的优劣对比
利用XMLHTTP检测URL及探测服务器信息
全球商业领袖们在关注什么
Windows Vista终极版下载和发布
中国解禁维基百科部分内容
最伟大的IT人物10强 乔布斯第1盖茨第3
二代互联网不再是美国天下 各国争相研制新技术
整合GOOGLE和MSN的Flash卫星地图
中国微硬盘产业被日本扼杀--南方汇通判死刑
用过AJAX的朋友肯定知道javascript是使用UTF-8国际编码,即每个汉字用4个字节来存储,但是这就造成了用AJAX来send数据的时候出现乱码。
Ajax乱码产生主要有2个原因
1. xtmlhttp 返回的数据默认的字符编码是utf-8,如果前台页面是gb2312或者其它编码数据就会产生乱码
2. post方法提交数据默认的字符编码是utf-8,如果后台是gb2312或其他编码数据就会产生乱码
一、使用encodeURIComponent加上修改 Content-Type 为 application/x-www-form-urlencoded" 来把数据统一编码成 url 格式,但是这样做有一个弊端,就是太大的数据往往会出错。
二、是通过vbscript 的写的函数把数据转成gb2312格式的,我个人觉得这种方法比较好。有兴趣的朋友可以到网上去查一下。
三、客户端、服务器端全部采用Utf-8编码,且url发送中文字采用escape编码,unescape解码。而且效率高,而且符合目前的形式,utf-8编码本身就是一种比较优秀的编码。
今天突发奇想,AJAX调用的时候会不会发送cookie 呢?马上写了一个程序测试一下,果然能,这样就可以在调用ajax之前,先把数据通过javascript写到cookie里,然后再send就可以将cookie里的数据发送出去了,太爽了!!
演示地址:http://cn5.cn/ajax/ajax12.htm
客户端代码 ajax.htm
AJAX使用cookie传值例子:
服务器端代码 a.php
Header(\"Content-type: text/html;charset=GB2312\");
echo \"以下是您送出的所有COOKIE变量及其值n\";
print_r($_COOKIE);
?>
----------------
ajax乱码解决总结
第一,javascript沿用java的字符处理方式,内部是使用unicode来处理所有字符的,
第二,utf-8是每个汉字(unicode字符)用3个字节来存储。
第三,用utf-8来send数据是不会出现乱码的,是后台程序没有正确解码才会出现乱码。
第四,ajax发送数据的时候如果修改 Content-Type 为 application/x-www-form-urlencoded",肯定是用post方式,而“太大的数据往往会出错”是用GET方式发送数据造成的。
第五,用vbscript写的函数是用来把数据转成gbk编码(操作系统默认的编码方式。如果在繁体系统上就是big5之类的编码)的,而不是gb2312,两者的编码字符数量相差3倍左右。
第六,用cookie来发送数据,一是很容易溢出,二是要不停的擦屁股,否则cookie里面的数据在每个http请求(包括图片和脚本请求)中都会被发送。三是并发几个http请求的时候,没有办法指定那个coo
问题
Ajax是个好东西,但使用起来却不是那么方便。问题总结如下:
·在各种浏览器上的创建方式和使用方法不一致
·各个浏览器对响应的缓存策略有所不同
·浏览器存在跨域获取限制
前两个问题可以通过封装 XMLHTTPRequest 对象来解决,第三个问题的解决方法有很多中,兼容性和移植性比较好的就是在本域服务器上放置一个中转 proxy 。Modello.ajax 就是提供这套解决方案的工具集。
安装
下载Modello 和 Mdello.ajax
解压并将 modello.js, modello.ajax.js, jsproxy.php 这三个文件放到你的服务器任意文档目录中
在 html 页面中包含 modello.js 和 modello.ajax.js 这两个脚本文件
urlget 方法
Modello.ajax 使用起来非常的简单,请看下面例子:
Define('URLGET_PROXY', '/jsproxy.php');
// 强大的 urlget 方法
var urlget = Class.get('modello.ajax.Urllib').urlget;
var url = '…';
// 同步 GET 方法获取
var response = urlget(url);
// 同步 POST 方法获取
var data = '…';
var response = urlget(url, data);
// 异步 POST 方法获取
var callback = function (response) {
// …
}
var ret = urlget(url, data, callback);
// 设置请求头部
var headers = [\"User-Agent: Modello.ajax's urlget\"];
var ret = urlget(url, data, callback, headers);
// 使用命名通道
var chunnel = '…';
var ret = urlget(url, data, callback, headers, chunnel);
// 使用 Response 对象
if (response.getStatus() == 200) {
alert(response.getText());
}// 设置跨域中转 proxy 路径
Define('URLGET_PROXY', '/jsproxy.php');
// 强大的 urlget 方法
var urlget = Class.get('modello.ajax.Urllib').urlget;
var url = '…';
// 同步 GET 方法获取
var response = urlget(url);
// 同步 POST 方法获取
var data = '…';
var response = urlget(url, data);
// 异步 POST 方法获取
var callback = function (response) {
// …
}
var ret = urlget(url, data, callback);
// 设置请求头部
var headers = [\"User-Agent: Modello.ajax's urlget\"];
var ret = urlget(url, data, callback, headers);
// 使用命名通道
var chunnel = '…';
var ret = urlget(url, data, callback, headers, chunnel);
// 使用 Response 对象
if (response.getStatus() == 200) {
alert(response.getText());
}
urlget 各个参数的解释如下:
url:目标资源的 URL 地址。
Data:POST 数据。如果 data 为空,则使用 GET 方法获取。
Callback:异步获取回调函数。如果 callback 为空,则使用同步获取。
Headers:附加请求头部。这是一个数组,每一项为字符串,设置一行头部,字符串末尾不可以带回车换行。
Chunnel:命名通道。用于重用某个连接通道。
Urlget 的返回值:
如果是同步获取,成功返回 Response 对象,失败返回 false。如果是异步获取,成功返回 true,并且在获取后调用回调函数,失败返回 false。如果指定了命名通道,但该通道正在被其它请求占用,同步、异步都统一返回 false。
回调函数的参数:
response:Response 对象。
Chunnel:调用时指定的命名通道。
Response 对象
Response 对象用于访问响应的各个数据项。它提供接口如下:
response.getStatus(); // HTTP 响应码(整数)
response.getStatusText(); // 响应码的字面解释
response.getHeader(key); // 由 key 指定的响应的头部数据
response.getAllHeaders(); // 响应的所有头部数据(不包含状态行)
response.getRawHeader(); // 响应的原样头部数据(包含状态行)
response.getText(); // 响应的体部数据
response.getXML(); // 响应的体部数据格式化为 Xml Document 对象response.getStatus(); // HTTP 响应码(整数)
response.getStatusText(); // 响应码的字面解释
response.getHeader(key); // 由 key 指定的响应的头部数据
response.getAllHeaders(); // 响应的所有头部数据(不包含状态行)
response.getRawHeader(); // 响应的原样头部数据(包含状态行)
response.getText(); // 响应的体部数据
response.getXML(); // 响应的体部数据格式化为 Xml Document 对象
大部分情况下,使用 urlget 函数足可以应付,并且它是可以跨浏览器,跨域使用的。如果你想做一些更底层的操作,Modello.ajax 为你提供两个跨浏览器使用的基类:Connection 和 Request
Connection 类
这是一个静态类,提供跨浏览器的方法返回一个 XMLHTTPRequest 对象。使用方法如下:
声明:以下推荐的类均来自互联网的开源项目,版权所有属于原作者。
到目前为止,JavaScript 是一种不完全支持面向对象特性的脚本语言。之所以这样说是因为 JavaScript 的确支持对象的概念,在程序中我们看到都是对象,可是 Javascipt 并不支持类的封装和继承。JavaScript 的确支持自定义对象和继承,不过使用的是另外一种方式:prototype(中文译作:原型)。用过 JavaScript 的或者读过《设计模式》的读者都会了解这种技术,描述如下:
每个对象都包含一个 prototype 对象,当向对象查询一个属性或者请求一个方法的时候,运行环境会先在当前对象中查找,如果查找失败则查找其 prototype 对象。注意 prototype 也是一个对象,于是这种查找过程同样适用在对象的 prototype 对象中,直到当前对象的 prototpye 为空。
在 JavaScript 中,对象的 prototype 在运行期是不可见的,只能在定义对象的构造函数时,创建对象之前设定。
使用 Modello 编写的类所具备如下特性:
·私有成员、公共成员和静态成员
·类的继承,多继承
·命名空间
·类型鉴别
Modello 还具有以下特性:
·更少的概念,更方便的使用方法
·小巧,只有两百行左右的代码
·设计期和运行期彻底分离,使用继承的时候不需要使用 prototype,也不需要先创建父类的实例
·兼容 prototype.js 的类,兼容 JavaScript 构造函数
·跨浏览器,跨浏览器版本
·开放源代码,BSD licenced,允许免费使用在个人项目或者商业项目中
使用 Modello 编写的类功能可以媲美使用 Atlas 编写的类,并且使用起来更简洁。如果你想用 Modello 框架代替 prototype.js 中的简单类框架,只需要先包含 modello.js,然后去掉 prototype.js 中定义 Class 的几行代码即可,一切将正常运行。
Modello
Modello 的完整参考说明和下载地址:http://modello.sourceforge.net/
JavaScript Class Framework
Modello is a lightweight framework that enables you to write JavaScript class like other class-based object-oriented programming language. It introduces class, class-based inheritance, multi-inheritance, private members, RTTI and more into JavaScript. Modello can help you write more readable, reusable and maintainable JavaScript code.
Modello
Modello下载: http://sourceforge.net/project/showfiles.php?group_id=164137&package_id=185772
Modello.ajax
跨域Ajax工具
Ajax是个好东西,但使用起来却不是那么方便。问题总结如下:
·在各种浏览器上的创建方式和使用方法不一致
·各个浏览器对响应的缓存策略有所不同
·浏览器存在跨域获取限制
前两个问题可以通过封装 XMLHTTPRequest 对象来解决,第三个问题的解决方法有很多中,兼容性和移植性比较好的就是在本域服务器上放置一个中转 proxy 。Modello.ajax 就是提供这套解决方案的工具集。
Modello.ajax下载: http://sourceforge.net/project/showfiles.php?group_id=164137&package_id=187232
ColorCode
代码着色,多语言高亮,使用极为简单
ColorCode官方网址:http://www.ajaxwing.com/colorcode/
Multi-Language Syntax Highlighter
ColorCode is a multi-language syntax source code highlighter. It is designed to be very easy to use and extend. There is two parts in ColorCode: client-side script and back-end render. You can redefine the color scheme in client-side vias changing the CSS file, and you can also define a new syntax for the language which ColorCode does not support. ColorCode use PEAR's Text_Highlighter as it's back-end render, and supports 14 languages syntax:
c++, css, diff, dtd, html, java, javascript, mysql, perl, php, python, ruby, sql, xml
Usage
First, include modello.js, ajax.js, colorcode.js and colorcode.css into your html page. Second, define COLORCODE_BACK_END macro. Third, create and ColorCode object and call it's apply() function. And then use textarea tag to wrap the code that need to be rendered with ColorCode.
ColorCode下载:http://www.ajaxwing.com/download/colorcode.zip
Nifty Corners Cube
JavaScript 圆角(斜角)矩形,同样使用起来也很快捷。
Nifty Corners Cube官方网址:http://www.html.it/articoli/niftycube/index.html
Nifty Corners Cube are a solution to get rounded corners without images, and this third version is build by three main components:
·A javascript file, named "niftycornerscube.js
“我上许多的新闻网站,因为我不相信其中任何一个。”17岁的Sean这么解释他如何阅读在线新闻的。
“当你上了大学以后,Myspace就算不上什么了”高中毕业生18岁的Sasha说。
“在你发展的过程中建造,学习和犯错–你将会在做事情的过程中学到更多,而不是在你做这件事情之前。”37Signals的Jason Fried,他拥护迭代开发模式(iterative development)。
“在5到10年内,媒体的价值将存在于那些培养用户的公司,而不是那些控制内容的公司。”Kleiner Perkins的前任合伙人Vinod Khosla说。
“对我而言,透明度是一件具有竞争性的武器。”Sun微系统公司的CEO Jonathan Schwartz这么解释自己为什么写Blog。
“Ebay有1.5亿的用户,理想的来说,就是1.5亿个人学会了如何相信陌生人。”Ebay的创始人Pierre Omidyar认为商业能为积极的社会变革带来动力。
“我最喜欢Google,因为他们最干净。其他的网站则试图将你的注意力带走。去那些网站不会有任何收获。”18岁的Sasha这么解释为什么适应用户习惯比起强迫他们去适应你要来的聪明的多。
“我们的成功与我们的总裁们的‘好主意’一点关系没有。”Google创始人Sergey Brin更喜欢群体的智慧。
“我们96%的时间里不知道自己在做什么。”Flickr的创始人Stewart Butterfield认为剩下的4%足以让许多人非常快乐了。
“雇用律师起诉对于那些普通公司来说,比起自己创意要简单的多”前任FCC的主席Michael Powell解释为什么那些提供内容服务的公司起诉他们的顾客。
“我告诉我的工程师,不管你有多么聪明,在公司外有着更多比你聪明的人,所以我们需要提供给他们工具,让他们创新。”Omidyar也喜欢群体的智慧。
“传统上,人们认为越多越好。多的也许能行,但是它将会是痛苦、昂贵和冰冷的。看看那些一条路走到黑的人,无法与别人竞争。”Fried创造了几个新词。
证明这个世界与原始的数码时代完全不同:假设你要买一个CD机,你要到哪去买?17岁的Sean困惑的说:“CD机是什么?”
“你给一个公司越多的钱,他们越不可能成功。”Khosla说。
“一般的消费者并不知道浏览器、互联网以及搜索框之间的区别。”Mozilla基金会的Mitchell Baker提供了这样的观点。
“我们认为任何来参加演唱会的人都是平等的,他们都参与到音乐的创作之中。”Grateful Dead乐队的Mickey Hart说道。
“我们成功第一的要素是运气。我们跟随着自己内心而选择了搜索,因为它既有用也有趣。”Brin这么解释如何创立Google。
阅读本站更多与 Web 2.0,Ajax 相关的文章:
Web 2.0 编程思想:16条法则(Dion Hinchcliffe)
Ajax与系列精华Javascript库(Modello)
什么是Web 2.0?What Is Web 2.0?(翻译)
Web 2.0的设计模式
AJAXPatterns网站对现有AJAX框架做总结
CSS中的滑动门技术
从Gmail认识的W3C网页标准和Ajax
AJAX:开发者新的技术天地介绍
XML与XML 命名空间(Namespaces)
IBM发布AJAX Toolkit Framework
Tags - WEB2.0 , WEB2.0名言 , 网魂工作室