Ajax在改变着web应用,并且带来了一种前所未有的桌面应用程序之外的震撼。但是,在这些宣传的背后我们应该意识到,其实ajax不过是——(X)HTML,Javascript以及XML,没什么新鲜的.在这个教程中,我将给你展示如何让简单的添加ajax到你的应用中去,并且教你如何使用一个流行的javascript库Jquey进行ajax开发.
1.什么是ajax
你以前可能听说过ajax,或者至少用过ajax的应用--比如Gmail.简单的说,ajax就是使用javascript来异步地处理数据,而不是一下子重载整个页面.SitePoint上有个教程agoodintroductiontoAjax.另外,ajax这个词出自JesseJamesGarrett的这篇著名的文章.
不幸的是,关于ajax深入的实践教程可以说少之又少,还有就是ajax中使用的XMLHttpRequest类对初学网页开发的人来说有很大的难度.不过庆幸的是有一大批javascript库相继出现,为实现ajax提供了简单的方法.我们今天要用到的Jquery就是其中之一.
2.什么是JQuery
Jquery是一个成熟的Javascript库,它提供许多其他库没有的特性.当然也得承认,它有19K之大,不想moo.fx那样只有3KB之轻.你可以在这里看到对许多javascript库性能以及其他方面的比较数据.
3.先验知识
要学习此教程,你需要有基本的javascript只是,如果你懂c风格的语言,那么你可以对javascript很快上手.其实不过是大括号,函数声明以及可有可无的行末分号(对Jquery来说;为必须).如果你想学习javascript,可以看这个教程.另外,既然我们讨论的是web应用,基本的html只是自然是必不可少的.
4.Jquery101
让我们简单浏览一下jQuery.要想使用jQuery,首先你必须下载这个库.下载地址在这里(目前版本1.1.2).jQuery的语法非常简单:找到,然后做.我们从文档中选择元素则使用$().这个符号就相当于document.getElementById(),不过除了支持ID外,它还支持css选择符以及一些XPath选择符.而且,它可以返回一个元素的数组.好,也许举个例子可以更好的说明$()的功能.
我们想使用函数来操作我们的选择符.比如,把"HelloWorld!"添加到每个class为foo的div上去,然后设置颜色为红色,我们可以这样写代码:
$("div.foo").append("HelloWorld!").css("color","red");
很简单啊!一般情况下,这需要两行代码来完成:
复制代码 代码如下:
$("div.foo").append("HelloWorld!");
$("div.foo").css("color","red");
jQuery的链接方法可以是允许你连写你的代码,这点别的库恐怕没有.有很多jQuery的函数不需要对象,也就是说独立工作,许多ajax相关的函数都这样.比如,我们将会使用的post函数,调用方式为$.post(parameters).更多jQuery函数信息可以来onlinedocumentation或者visualjquery.com.
5.示例一:我们的第一个ajax程序
作为一个例子,我们将做一个交互概念生成器.简单的说就是让我们从列表中随机选择两个选项,然后组合成一个词组.这个例子中我们将使用web2.0特性的词语(像'Mashup','Folksonomy','Media'等等),通常情况下我们从文本文件中获得这些选项.为节省用户用javascript下载每一个组合(或者至少每一个元素)的时间,我们将在服务器端快速生成它,并且使用jQuery在客户端获取到它.jQuery可以很好的和javascript结合使用,所以你将发现在代码中使用它将使工作变得十分容易.
服务器端代码(php):
简单起见,我们使用最简单的代码来做我们的概念生成器.不要担心他是如何工作的,注意看它是干什么的:输出一句话.注意,这段代码没有输出xml,他只是输入一个纯文本:
复制代码 代码如下:
header("Cache-Control:no-cache");
//Ideally,you'dputtheseinatextfileoradatabase.
//Putanentryoneachlineof'a.txt'anduse$prefixes=file("a.txt");
//Youcandothesamewithaseparatefilefor$suffixes.
$prefixes=array('Mashup','2.0','Tagging','Folksonomy');
$suffixes=array('Web','Push','Media','GUI');
//Thisselectsarandomelementofeacharrayonthefly
echo$prefixes[rand(0,count($prefixes)-1)]."isthenew"
.$suffixes[rand(0,count($prefixes)-1)];
//Exampleoutput:TaggingisthenewMedia
?>
这里,我们使用Cache-Control头选项是因为IE总是为同一个地址建立缓存,甚至页面内容有变化时也是.很明显,这对我们的例子很不利,因为我们在每次加载的时候重新生成一句话.我们也可以使用jQuery生成一个随机数加到地址的后边,不过这不像在服务器端这样处理比较简单.[译者著:其实作者在这里提供了ajax和IEcache冲突的两种解决方案.]
客户端代码(html)
可以开始编写前端代码了,然后我们就可以把ajax加进去了.我们需要做的仅仅是加一个按钮,好让用户点击一下获得一句新的语句,还有一个div标签,好让我们在从服务器端接收到语句的时候显示在div里面.我们将使用jQuery选中这个div以及加载返回的那句话,我们可以使用div的id来引用它.如果需要,你可以加载这句话到不同的元素标签中,这可能需要使用class了.不过这里,我们仅仅需要使用id就够了.此页面body标签中的内容为: