原文作者:Akash Mehta
原文链接:Easy Ajax with jQuery
译者:令狐葱
XMLHttpRequest
类对初学网页开发的人来说有很大的难度.不过庆幸的是有一大批javascript库相继出现,为实现ajax提供了简单的方法.我们今天要用到的Jquery就是其中之一.
$()
.这个符号就相当于
document.getElementById(),不过除了支持ID外,它还支持css选择符以及一些XPath选择符. 而且,它可以返回一个元素的数组.好,也许举个例子可以更好的说明
$()的功能.
我们想使用函数来操作我们的选择符.比如,把
"Hello World!" 添加到每个class为foo的div上去,然后设置颜色为红色,我们可以这样写代码:
$("div.foo").append("Hello World!").css("color","red");
很简单啊!一般情况下,这需要两行代码来完成:
$("div.foo").append("Hello World!");
$("div.foo").css("color","red");
jQuery的链接方法可以是允许你连写你的代码,这点别的库恐怕没有.有很多jQuery的函数不需要对象,也就是说独立工作,许多ajax相关的函数都这样.比如,我们将会使用的post函数,调用方式为
$.post(parameters)
. 更多jQuery函数信息可以来
online documentation 或者
visualjquery.com.
<?php
header("<a href="http://www.sitepoint.com/glossary.php?q=C#term_21" title="Cache, pronounced "cash", refes to a stored copy of (or pointers to) previously accessed data.">Cache-Control: no-cache");
// Ideally, you'd put these in a text file or a database.
// Put an entry on each line of 'a.txt' and use $prefixes = file("a.txt");
// You can do the same with a separate file for $suffixes.
$prefixes = array('Mashup','2.0','Tagging','Folksonomy');
$suffixes = array('Web','Push','Media','GUI');
// This selects a random element of each array on the fly
echo $prefixes[rand(0,count($prefixes)-1)] . " is the new "
. $suffixes[rand(0,count($prefixes)-1)];
// Example output: Tagging is the new Media
?>
Cache-Control
头选项是因为IE总是为同一个地址建立缓存,甚至页面内容有变化时也是.很明显,这对我们的例子很不利,因为我们在每次加载的时候重新生成一句话.我们也可以使用jQuery生成一个随机数加到地址的后边,不过这不像在服务器端这样处理比较简单.[译者著:其实作者在这里提供了ajax和IE cache冲突的两种解决方案.]
<input type="submit" id="generate" value="Generate!">
<div id="quote"></div>
一般说来,我们需要为这个按钮(就是这个id为generate的input)加上一个冗长的
onSubmit
事件. 有时,我们用onSumit事件调用一个Javascript函数. 但是在jQuery里面,我们设置不需要修改任何html代码,我们可以简单的实现行为(事件处理)和结构(html代码)的分离.
$("element expression").click(function(){
// Code goes here
});
可能你已经知道,在CSS里选择一个元素的时候我们使用#来使用元素的id属性. 你可以在jQuery里使用同样的语法.因此,要选择那个按钮,我们可以使用#generate. 注意,这种语法可以让我们把事件处理函数定义成匿名的.
Mark Wubben's JavaScript Terminology page
提供了详细的关于匿名函数的解释,有兴趣可以参考.
我们将要使用jQuery中一个比较高级的ajax函数:load(). 假设我们的代码保存为script.php.我们这样把它和我们的客户端整合起来:
$("#generate").click(function(){
$("#quote").load("script.php");
});
只有:3行代码!现在我们已经做了一个完整的ajax随机语句生成器了!不错!
问 题是javascript代码并不是在一个浏览器加载完就执行的函数内. 这样的话,这段代码就会试图去关联一个可能还没有被加载的元素.一般情况下我们使用window.load来处理这个问题,不过这种方法的局限性在于, window.load只在所有的东西(图片及其它)被加载完成后加载一次.我们对等待这些图片的加载可能毫无兴趣--我们只是需要去获得DOM中的元素 罢了.
幸运的是,jQuery有一个
$(document).ready()函数,如其名,它在DOM被加载完之后就被执行.
完整的代码
下面是完整的代码,使用
$(document).ready()以及一些简单的html和css:
<html>
<head>
<title>Ajax with jQuery Example</title>
<script type="text/JavaScript" src="jquery.js"></script>
<script type="text/JavaScript">
$(document).ready(function(){
$("#generate").click(function(){
$("#quote p").load("script.php");
});
});
</script>
<style type="text/css">
#wrapper {
width: 240px;
height: 80px;
margin: auto;
padding: 10px;
margin-top: 10px;
border: 1px solid black;
text-align: center;
}
</style>
</head>
<body>
<div id="wrapper">
<div id="quote"><p> </p></div>
<input type="submit" id="generate" value="Generate!">
</div>
</body>
</html>
代码可以在这里下载,注意你的jquery需要保存在php文件的同目录,并且名为
jquery.js
.现在你已经熟悉jQuery了,让我们做些更复杂的:表单元素和XML处理,这才是真正的ajax!
相关文章: