??xml version="1.0" encoding="utf-8" standalone="yes"?> Ҏ二: Ҏ三: 此文以实例ؓ基础一步步说明了jQuery的工作方式。现以中文翻译(d我的补充说明Q如下。如有相x见或请麻烦到我的 BLOG 写个回复或?EMAIL 告知?/p>
英文原版Q?a >http://jquery.bassistance.de/jquery-getting-started.html Q感谢原文作?Jörn Zaefferer 本文发布已征求原作者同意?/strong> 另外我认为在学习q程?有两个API文档你要打开随时查看: q个指南是一个对jQuery库的说明Q要求读者了解HTML(DOM)和CSS的一些常识。它包括了一个简单的Hello World的例子,选择器和事g基础QAJAX、FX的用法,以及如何制作jQuery的插件?q个指南包括了很多代码,你可以copy它们Qƈ试着修改它们Q看看生的效果? 一开?我们需要一个jQuery的库,最新的下蝲可以?a >q里扑ֈ。这个指南提供一个基本包含实例的包供下蝲. 下蝲Q?a class=download >jQuery Starterkit (译者Keel?一定要下蝲q个包,光看文章不实践肯定是不行的? 下蝲后解压羃Q然后用你最喜欢的文本编辑器打开starterkit.html和custom.jsq两个文件?span class=log>(译者Keel?q两个就是例子文?所有的例子都用q两个例子作?custom.js写jQuery代码,starterkit.html观察效果.用editPlus打开) 现在,我们已l做好了一切准备来q行q个著名?Hello world"例子. 在做所有事情之?我们要让jQueryd和处理文档的DOM,必须可能快地在DOM载入后开始执行事?所?我们用一个ready事g作ؓ处理HTML文档的开?看看我们打开的custom.jsq个文g,里面已经准备好了: 放一个简单的alert事g在需要等DOM完成载入,所以我们把dE稍变复杂一?在点MQ何一个链接时昄一个alert. q样在你点击面的一个链接时都会触发q个"Hello world"的提C?/p>
(译者Keel?L此代码修改custom.jsq保?然后用浏览器打开starterkit.html观察效果? 让我们看一下这些修Ҏ什么含义?("a") 是一个jQuery选择?selector),在这里,它选择所有的a标签Q译者Keel注:?lt;a></a>Q?/span>Q? h jQuery “c?#8221;(jQuery "class")的一个别Uͼ因此$()构造了一个新的jQuery 对象(jQuery object)。函?click() 是这个jQuery对象的一个方法,它绑定了一个单M件到所有选中的标{?q里是所有的a标签),q在事g触发时执行了它所提供的alertҎ. q里有一个拟行相似功能的代码: 不同之处很明?用jQuery不需要在每个a标签上写onclick事g,所以我们拥有了一个整z的l构文(HTML)和一个行为文?JS),辑ֈ了将l构与行为分开的目?像我们使用CSSq求的一? 下面我们会更多地了解到选择器与事g. jQuery提供两种方式来选择html?elementsQ第一U是用CSS和Xpath选择器联合v来Ş成一个字W串来传送到jQuery的构造器Q如Q?("div > ul a")Q;W二U是用jQuery对象的几个methods(Ҏ)。这两种方式q可以联合v来合用?/p>
Z试一下这些选择器,我们来试着在我们starterkit.html中选择q修改第一个ordered list. 一开始,我们需要选择q个list本nQ这个list有一个ID?#8220;orderedlist”Q通常的javascript写法是document.getElementById("orderedlist").在jQuery中,我们q样做: q里starterkit中的一个CSS样式red附加Corderedlist?span class=log>(译者Keel注:参考测试包中的css目录下的core.cssQ其中定义了red样式)。因此,在你h了starterkit.html后,你将会看到第一个有序列?ordered list )背景色变成了U色Q而第二个有序列表没有变化. 现在Q让我们d一些新的样式到list的子节点. q样Q所有orderedlist中的li都附加了样式"blue"?/p>
现在我们再做个复杂一点的Q当把鼠标放在li对象上面和移开时进行样式切换,但只在list的最后一个element上生效?/p>
q有大量的类似的CSS?a class=doc title="Documentation for XPath selectors" >XPath例子Q更多的例子和列表可以在q里扑ֈ?span class=log>Q译者Keel注:入门看此文,修行在个人,要想在入门之后懂更多Q所以这D话的几个链接迟早是要必看的Q不会又要翻译吧...^_^!Q?/span> 每一个onXXX事g都有效,如onclick,onchange,onsubmit{,都有jQuery{h表示ҎQ译者Keel注:jQuery不喜ƢonXXXQ所以都Ҏ了XXXQ去掉了onQ?/span>?a class=doc title="Documentation for advanced events" >其他的一些事?/a>Q如ready和hover,也提供了相应的方法?/p>
你可以在Visual jQuery扑ֈ全部的事件列表,在Events栏目? 用这些选择器和事g你已l可以做很多的事情了Q但q里有一个更强的好东东! find() 让你在已l选择的element中作条g查找,因此 $("#orderedlist).find("li") 像 $("#orderedlist li"). each()一栯P代了所有的liQƈ可以在此基础上作更多的处理?大部分的Ҏ,如addClass(), 都可以用它们自己?each() 。在q个例子? html()用来获取每个li的html文本, q加一些文字,q将之设|ؓli的html文本?span class=log>Q译者Keel注:从这个例子可以看?html()Ҏ是获取对象的html代码Q?html('xxx')是设|?xxx'为对象的html代码Q?/span> 另一个经常碰到的d是在没有被jQuery覆盖的DOM元素上call一些方法,惛_一个在你用AJAX方式成功提交后的resetQ?/p>
Q译者Keel注:q里作者将form的id也写成了formQ源文g?lt;form id="form">Q这是非怸好的写法Q你可以这个IDҎform1或者testFormQ然后用$("#form1")或? ("#testForm")来表C它Q再q行试。) q个代码选择了所有ID?form"的元素,q在其第一个上call了一个reset()。如果你有一个以上的formQ你可以q样做: Q译者Keel注:h意一定要亲自这些代码写在custom.js中ƈ在starterkit.html上测试效果才能有所体会Q必要时要观察starterkit.html的html代码Q?/p>
q样你在点击Reset链接后,选择了文中所有的form元素Qƈ对它们都执行了一ơreset()?/p>
q?有一个你可能要面对的问题是不希望某些特定的元素被选择。jQuery 提供了filter() 和not() Ҏ来解册个问题?filter()以过滤表辑ּ来减不W合的被选择? not()则用来取消所有符合过滤表辑ּ的被选择? 考虑一个无序的listQ你惌选择所有的没有ul子元素的li元素?/p>
q个代码选择了所有的li元素Q然后去除了没有ul子元素的li元素。刷新浏览器后,所有的li元素都有了一个边框,只有ul子元素的那个li元素例外?/p>
Q译 者Keel注:h意体会方便之极的css()ҎQƈ再次提醒请务必实际测试观察效果,比方说换个CSS样式呢?再加一个CSS样式呢?像这P$ ("li").not("[ul]").css("border", "1px solid black").css("color","red");Q?/p>
上面代码中的[expression] 语法是从XPath而来Q可以在子元素和属?elements and attributes)上用作过滤器Q比如你可能想选择所有的带有name属性的链接: q个代码l所有带有name属性的链接加了一个背景色?span class=log>Q译者Keel注:q个颜色太不明显了,写成$("a[@name]").background("red");Q?/span> 更常见的情况是以name来选择链接Q你可能需要选择一个有特点href属性的链接Q这在不同的览器下对href的理解可能会不一_所以我们的部分匚w("*=")的方式来代替完全匚w("=")Q?/p>
到现在ؓ止,选择器都用来选择子元素或者是qo元素。另外还有一U情冉|选择上一个或者下一个元素,比如一个FAQ的页面,{案首先会隐藏,当问题点LQ答案显C出来,jQuery代码如下Q?/p>
q?里我们用了一些链式表达法来减代码量Q而且看上L直观更容易理解。像'#faq' 只选择了一ơ,利用end()ҎQ第一ơfind()Ҏ会结?undone)Q所以我们可以接着在后面lfind('dt')Q而不需要再? ('#faq').find('dt')?/p>
在点M件中的,我们?$(this).next() 来找到dt下面紧接的一个dd元素Q这让我们可以快速地选择在被点击问题下面的答案?/p>
Q译 者Keel注:q个例子真是太酷了,FAQ中的{案可以收羃Q从利用next()的思\到实现这些效果都有很多地斚w要我们消化,注意 if (answer.is(':visible'))用法Q注意answer.slideUp();不懂的地方赶紧查我在最开始提到的两个必看API文档Q?/p>
除了选择同别的元素外,你也可以选择父的元素。可能你惛_用户鼠标Ud文章某段的某个链接时Q它的父U元?-也就是文章的q一D늪出显C,试试q个Q?/p>
试效果可以看到Q移到文章某D늚链接Ӟ它所在的D全用上highlight样式Q移C后又恢复原样?/p>
Q译者Keel注:highlight是core.css中定义的样式Q你也可以改变它Q注意这里有W二个function()q是hoverҎ的特点,请在API文中查阅hoverQ上面也有例子说明)
在我们l之前我们先来看看这一步: jQuery会让代码变得更短从而更Ҏ理解和维护,下面?(document).ready(callback)的羃写法Q?/p>
应用到我们的Hello world例子中,可以q样: 现在Q我们手上有了这些基的知识,我们可以更进一步的探烦其它斚w的东西,׃AJAX开始! 在这一部分我们写了一个小的AJAX应用Q它能够rate一些东?span class=log>Q译Keel注:是Ҏ些东西投)Q就像在youtube.com上面看到的一栗?/p>
首先我们需要一些服务器端代码,q个例子中用C一个PHP文gQ读取rating参数然后q回ratingL和^均数。看一?a >rate.php代码. 虽然q些例子也可以不使用AJAX来实玎ͼ但显C我们不会那么做Q我们用jQuery生成一个DIV容器QID?rating". q段代码生成?个链接,q将它们q加到id?rating"容器中,当其中一个链接被点击Ӟ该链接标明的分数׃以rating参数形式发送到rate.phpQ然后,l果以XML形式会从服务器端传回来,d到容器中Q替代这些链接?/p>
如果你没有一个安装过PHP的webserverQ你可以看看q个在线的例?/a>. 不用javascript实现的例子可以访?softonic.de 点击 "Kurz bewerten!" 更多的AJAXҎ可以?a class=doc title="Documentation for AJAX methods" >q里 扑ֈQ或者看?a >API文 下面的AJAX filed under AJAX. Q译者Keel注:q个在线实例从国内访问还是比较慢的,点击后要{一会儿才能看到l果Q可以考虑对它q行修改Q比如加上loadingQ投后加上再投的q回链接{。此外,q个例子中还是有很多需要进一步消化的地方Q看不懂的地方请参考API文。) 一个在使用AJAX载入内容时经常发生的问题是:当蝲入一个事件句柄到一个HTML文Ӟq需要在载入内容上应用这些事Ӟ你不得不在内容加载完成后应用q些事g句柄Qؓ了防止代码重复执行,你可能用到如下一个function: 现在QaddClickHandlers只在DOM载入完成后执行一ơ,q是在用hơ点d有clickMeToLoadContent q个样式的链接ƈ且内容加载完成后. h意addClickHandlers函数是作Z个局部变量定义的Q而不是全局变量(如:function addClickHandlers() {...})Q这样做是ؓ了防止与其他的全局变量或者函数相冲突. 另一个常见的问题是关于回?callback)的参数。你可以通过一个额外的参数指定回调的方法,单的办法是将q个回调Ҏ包含在一个其它的function? 用到单的AJAX后,我们可以认ؓ已经非常?#8220;web2.0”了,但是到现在ؓ止,我们q缺一些酷炫的效果。下一节将会谈到这些效? 一些动态的效果可以使用 你可以与 很多不错的效果可以访?a >interface plugin collection. q个站点提供了很多demos和文?/p>
q些效果插g是位于jQuery插g列表的前面的Q当然也有很多其他的插gQ比如我们下一章讲到的表格排序插g?/p>
q个表格排序插g能让我们在客L按某一列进行排序,引入jQuery和这个插件的js文gQ然后告诉插件你惌哪个表格拥有排序功能?/p>
要测试这个例子,先在starterkit.html中加上像下面q一行的代码Q?/p>
然后可以q样调用不着: 现在点击表格的第一行head区域Q你可以看到排序的效果,再次点击会按倒过来的序q行排列?/p>
q个表格q可以加一些突出显C的效果Q我们可以做q样一个隔行背景色Q斑马线Q效? 关于q个插g的更多例子和文可以?tablesorter首页扑ֈ. 几乎所有的特g都是q样用的:先include插g的js文g,然后在某些元素上使用插g定义的方?当然也有一些参数选项是可以配|的 l常更新的插件列表可以从jQuery官方?on the jQuery site扑ֈ. 当你更经常地使用jQuery?你会发现你自己的代码打包成插g是很有用处的,它能方便地让你的公司或者其他hq行重用.下一章我们将谈到如何构徏一个自q插g. 写一个自qjQuery插g是非常容易的,如果你按照下面的原则来做,可以让其他h也容易地l合使用你的插g. 你现在可以在你的插g中用这些帮助函C: 现在可以无需做Q何配|地使用插g?默认的参数在此时生效: 或者加入这些参数定? 如果你release你的插g, 你还应该提供一些例子和文,大部分的插g都具备这些良好的参考文? 现在你应该有了写一个插件的基础,让我们试着用这些知识写一个自q插g. 很多着控制所有的radio或者checkbox是否被选中,比如: 无论何时候,当你的代码出现eachӞ你应该重写上面的代码来构造一个插?很直接地: q个插g现在可以q样? 现在你应该还可以写出uncheck()和toggleCheck()?但是先停一?让我们的插g接收一些参? q里我们讄了默认的参数,所以将"on"参数省略也是可以?当然也可以加?on","off", ?"toggle",? 如果有多于一个的参数讄会稍E有点复?在用时如果只想讄W二个参?则要在第一个参C|写入null. 从上一章的tablesorter插g用法我们可以看到,既可以省略所有参数来使用或者通过一?key/value Ҏ重新讄每个参数. 作ؓ一个练?你可以试着?W四?/a> 的功能重写ؓ一个插?q个插g的骨架应该是像这L: 如果你想做更好的javascript开?你用一个叫 FireBug的firefox插g. 它提供了断点调试(比alert强多?、观察DOM变化{很多漂亮的功能 如果你还有未解决的问题,或者新的想法与Q你可以使用jQuery的邮件列?jQuery mailing list. 关于q个指南的Q何事情,你可以写maill作者或者发表评论在他的日志Q?a >blog. 关于q个指南的翻译Q何事情,你可以写maill我或者发表评论在我的日志Q?a >blog. 大大感谢John Resig创造了q么好的library! 感谢jQuery community 为John提供了如此多的咖啡和其他的一?<html>
<head>
<script src="prototype.js"></script>
<script src="jquery.js"></script>
<script>
jQuery.noConflict();
// Use jQuery via jQuery(...)
jQuery(document).ready(function(){
jQuery("div").hide();
});
// Use Prototype with $(...), etc.
$('someid').style.display = 'none';
</script>
</head>
<body></body>
</html><html>
<head>
<script src="prototype.js"></script>
<script src="jquery.js"></script>
<script>
var $j = jQuery.noConflict();
// Use jQuery via $j(...)
$j(document).ready(function(){
$j("div").hide();
});
// Use Prototype with $(...), etc.
$('someid').style.display = 'none';
</script>
</head>
<body></body>
</html> <html>
<head>
<script src="prototype.js"></script>
<script src="jquery.js"></script>
<script>
jQuery.noConflict();
// Put all your code in your document ready area
jQuery(document).ready(function($){
// Do jQuery stuff using $
$("div").hide();
});
// Use Prototype with $(...), etc.
$('someid').style.display = 'none';
</script>
</head>
<body></body>
</html>
]]>
]]>中文版译者:Keel
以下部分为原文翻?
jQuery入门指南教程
内容提要
安装
本章的相关链?
Hello jQuery
$(document).ready(function() {
// do stuff when DOM is ready
});$(document).ready(function() {
$("a").click(function() {
alert("Hello world!");
});
});<a href="#" onclick="alert('Hello world')">Link</a>
本章的相关链?
Find me:使用选择器和事g
$(document).ready(function() {
$("#orderedlist").addClass("red");
});$(document).ready(function() {
$("#orderedlist > li").addClass("blue");
});$(document).ready(function() {
$("#orderedlist li:last").hover(function() {
$(this).addClass("green");
}, function() {
$(this).removeClass("green");
});
});$(document).ready(function() {
$("#orderedlist").find("li").each(function(i) {
$(this).html( $(this).html() + " BAM! " + i );
});
});$(document).ready(function() {
// use this to reset a single form
$("#reset").click(function() {
$("#form")[0].reset();
});
});$(document).ready(function() {
// use this to reset several forms at once
$("#reset").click(function() {
$("form").each(function() {
this.reset();
});
});
});$(document).ready(function() {
$("li").not("[ul]").css("border", "1px solid black");
});$(document).ready(function() {
$("a[@name]").background("#eee");
});$(document).ready(function() {
$("a[@href*=/content/gallery]").click(function() {
// do something with all links that point somewhere to /content/gallery
});
});$(document).ready(function() {
$('#faq').find('dd').hide().end().find('dt').click(function() {
var answer = $(this).next();
if (answer.is(':visible')) {
answer.slideUp();
} else {
answer.slideDown();
}
});
});$(document).ready(function() {
$("a").hover(function() {
$(this).parents("p").addClass("highlight");
}, function() {
$(this).parents("p").removeClass("highlight");
});
});$(function() {
// code to execute when the DOM is ready
});$(function() {
$("a").click(function() {
alert("Hello world!");
});
});本章的相关链?
Rate me:使用AJAX
$(document).ready(function() {
// generate markup
var ratingMarkup = ["Please rate: "];
for(var i=1; i <= 5; i++) {
ratingMarkup[ratingMarkup.length] = "<a href='#'>" + i + "</a> ";
}
// add markup to container and applier click handlers to anchors
$("#rating").append( ratingMarkup.join('') ).find("a").click(function(e) {
e.preventDefault();
// send requests
$.post("rate.php", {rating: $(this).html()}, function(xml) {
// format result
var result = [
"Thanks for rating, current average: ",
$("average", xml).text(),
", number of votes: ",
$("count", xml).text()
];
// output result
$("#rating").html(result.join(''));
} );
});
});// lets use the shortcut
$(function() {
var addClickHandlers = function() {
$("a.clickMeToLoadContent").click(function() {
$("#target").load(this.href, addClickHandlers);
});
};
addClickHandlers();
});// get some data
var foobar = ...;
// specify handler, it needs data as a paramter
var handler = function(data) {
...
};
// add click handler and pass foobar!
$('a').click( function(event) { handler(foobar); } );
// if you need the context of the original handler, use apply:
$('a').click( function(event) { handler.apply(this, [foobar]); } );本章的相关链?
Animate me(让我生动h):使用FX
show()
?hide()
来表?$(document).ready(function() {
$("a").toggle(function() {
$(".stuff").hide('slow');
}, function() {
$(".stuff").show('fast');
});
});animate()
联合h创徏一些效?如一个带渐显的滑动效?$(document).ready(function() {
$("a").toggle(function() {
$(".stuff").animate({
height: 'hide',
opacity: 'hide'
}, 'slow');
}, function() {
$(".stuff").animate({
height: 'show',
opacity: 'show'
}, 'slow');
});
});本章的相关链?
Sort me(我有序?:使用tablesorter插g(表格排序)
<script src="lib/jquery.tablesorter.js" type="text/javascript"></script>
$(document).ready(function() {
$("#large").tableSorter();
});$(document).ready(function() {
$("#large").tableSorter({
stripingRowClass: ['odd','even'], // Class names for striping supplyed as a array.
stripRowsOnStartUp: true // Strip rows on tableSorter init.
});
});本章的相关链?
Plug me:制作自己的插?/h2>
jQuery.fn.foobar = function() {
// do something
};jQuery.fooBar = {
height: 5,
calculateBar = function() { ... },
checkDependencies = function() { ... }
};jQuery.fn.foobar = function() {
// do something
jQuery.foobar.checkDependencies(value);
// do something else
};jQuery.fn.foobar = function(options) {
var settings = {
value: 5,
name: "pete",
bar: 655
};
if(options) {
jQuery.extend(settings, options);
}
};$("...").foobar();
$("...").foobar({
value: 123,
bar: 9
});$("input[@type='checkbox']").each(function() {
this.checked = true;
// or, to uncheck
this.checked = false;
// or, to toggle
this.checked = !this.checked;
});$.fn.check = function() {
return this.each(function() {
this.checked = true;
});
};$("input[@type='checkbox']").check();
$.fn.check = function(mode) {
var mode = mode || 'on'; // if mode is undefined, use 'on' as default
return this.each(function() {
switch(mode) {
case 'on':
this.checked = true;
break;
case 'off':
this.checked = false;
break;
case 'toggle':
this.checked = !this.checked;
break;
}
});
};$("input[@type='checkbox']").check();
$("input[@type='checkbox']").check('on');
$("input[@type='checkbox']").check('off');
$("input[@type='checkbox']").check('toggle');$.fn.rateMe = function(options) {
var container = this; // instead of selecting a static container with $("#rating"), we now use the jQuery context
var settings = {
url: "rate.php"
// put more defaults here
// remember to put a comma (",") after each pair, but not after the last one!
};
if(options) { // check if options are present before extending the settings
$.extend(settings, options);
}
// ...
// rest of the code
// ...
return this; // if possible, return "this" to not break the chain
});Next steps(下一?
q有什?..
© 2006, Jörn Zaefferer - last update: 2006-09-12
中文版翻?Keel - 最后更? 2006-12-13
]]>
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
可结果依旧?br />baidu了一下,扑ֈ相关资料?br />解决ҎQ让提交的URL每次都向服务器端发送请求,而不是用缓存?br />Ҏ一Q加旉?var url = BaseURL + "&timeStamp=" + new Date().getTime();
Ҏ二:加随机数 var url = BaseURL + "&r=" + Math.random();
Ҏ三:自已惟뀂。?/p>
]]>
打开|站开始寻找我的目?发现q个东西居然有好多版?比如
说实?看到q些玩意,心里面顿时是凉了半截.
好多名词!!!
.看着q些东西感觉自己特别无知.q好大多脸熟,心里面的虚荣心还没有跌倒低?
点击一个链?比现在多一倍的新链接出现在眼前,每一个链接代表一个知识点.面呈现的一瞬间理智立刻崩溃?只是一个名不见l传的json有如此之多的知?那么其他?......面对无穷无尽的知识vz?不由理解了知识是学不完这句话.
在知识爆炸的今天,也许只有"现用现学"是解册U情늚最好办?
可是面对q些东西,开始觉得那?"现用现学"是多么恐怖的一U境?q种东西现学了能马上会用,用不是问?问题是用q些C西还能算出工E进?q能~出可以l护的代?如果再能保证代码的健壮??.......
q里不由惛_另一个问?Z么现用现学还能用?如果是全新的东西,快速的学习肯定仙也做不了.所以看h全新的知识应该有相应的共通点.
是不是因为面向对象的思想?个h猜测,可能性比较大,因ؓ一旦变成对象了,可以不他们的实现方式,一律归到已有的面向对象的思\中来,无非是多了几个新元素要记而已.要是q样,真应该感谢面向对?
<%@ page contentType="text/html; charset=GBK" %>
<html>
<head>
<title>
JSONCZ
</title>
<script type="text/javascript" src="zxml.src.js"></script>
<script type="text/javascript" src="json.js"></script>
<script type="text/javascript">
var xmlHttp;
//创徏对象
function createXMLHttpRequest(){
xmlHttp = zXmlHttp.createRequest();
}
function doJSON(){
//得到Car对象
var car = getCarObject();
//用JSON字符串化car对象
var carAsJSON = car.toJSONString();
alert("汽R对象JSON化ؓ:\n" + carAsJSON);
var url = "JSONExample?timeStamp=" + new Date().getTime();
//创徏对象
createXMLHttpRequest();
xmlHttp.open("POST",url,true);
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.setRequestHeader("Content-Type","application/x-www-form.urlencoded");
xmlHttp.send(carAsJSON);
}
//回调Ҏ
function handleStateChange(){
if (xmlHttp.readyState == 4){
if (xmlHttp.status == 200){
parseResults();
}
}
}
//解析l果
function parseResults(){
var responseDiv = document.getElementById("serverResponse");
if (responseDiv.hasChildNodes()){
responseDiv.removeChild(responseDiv.childNode[0]);
}
var responseText = document.createTextNode(xmlHttp.responseText);
responseDiv.appendChild(responseText);
}
//得到Car对象
function getCarObject(){
return new Car("Dodge","Coronet R/T",1968,"yellow");
}
//Car构造函?br /> function Car(make,model,year,color){
this.make = make;
this.model = model;
this.year = year;
this.color = color;
}
</script>
</head>
<body>
<br /><br />
<form action="#">
<input type="button" value="发送JSON数据" onclick="doJSON();"/>
</form>
<h2>
服务器响应:
</h2>
<div id="serverResponse">
</div>
</body>
</html>
服务器:JSONExample.java
package ajaxbook.chap4;
import java.io.*;
import java.net.*;
import java.text.ParseException;
import javax.servlet.*;
import javax.servlet.http.*;
import org.json.JSONObject;
public class JSONExample
extends HttpServlet {
//处理PostҎ
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException {
String json = readJSONStringFromRequestBody(request);
//使用JSONl字Ajax对象
JSONObject jsonObject = null;
try {
jsonObject = new JSONObject(json);
}
catch (ParseException pe) {
System.out.println("ParseException: " + pe.toString());
}
//q回输出l果
String responseText = "You have a " + jsonObject.getInt("year") + " "
+ jsonObject.getString("make") + " " + jsonObject.getString("model")
+ " " + " that is " + jsonObject.getString("color") + " in color.";
response.setContentType("text/xml");
response.getWriter().print(responseText);
}
//得到参数
private String readJSONStringFromRequestBody(HttpServletRequest request) {
StringBuffer json = new StringBuffer();
String line = null;
try {
BufferedReader reader = request.getReader();
while ( (line = reader.readLine()) != null) {
json.append(line);
}
}
catch (Exception e) {
System.out.println("Error reading JSON string: " + e.toString());
}
return json.toString();
}
}
注意Q要引入json.js和json的源文gQ用json.jar不行Q源文g参见书籍源代码第三章
参考:Ajax基础教程 作笔记吧
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=975204
1、我们在做验证码的时候往往׃要反作弊Q验证有时故意加入多的干扰因素,q时验证码显CZ很清楚,用户l常输入错误。这样不但要重新h面Q导致用h有看清楚验证码而重填而不是修改,而且如果没有用session保存下用戯入的其它数据的话(如姓?Q用户刚刚输入的内容也不存在了,q样l用户造成不好的体验?
2、本例在原有验证方式基础之上增加一DjsQ通过xmlhttp来获取返回|以此来验证是否有效,q样即用户览器不支持jsQ也不会影响他的正常使用了?
3、ؓ了防止作弊,当用戯?ơ输入错误时则重载一下图片,q样也利于用户因为图片上的验证码辨认不清而其终无法输入正确?
4、本例还特别适合验用户名是否有效Q只要从后台做个sql查询Q返回一个值或是xml卛_?q种例子太多 Q就在此不赘qC)?
5、本例的优点在于非常方便用户输入Q而且减少Ҏ务器端的hQ可以说既改善用户体验而且略会节省带宽成本Q但相应地要在页面上增加一DJavaScript代码Q在目前|速越来越快h们要求便捯适的今天Q似乎我们更应注意提供给用户良好的用感受?
代码如下Q?/p>
1、img.jsp,输入主页?/strong>
|
2、num.jsp,反馈xmlhttph的页?/strong>
|
3、random.jsp,生成验证码图片的面
|
|
Q责ȝ?火凤?sunsj@51cto.com TELQ(010Q?8476636-8007Q?br />
对于跨域调用QModello.ajax 采用在本域服务器讄一个中?proxy 的方式。?proxy 方式可以不用对个别浏览器q行Ҏ讄Q不用依赖具体的服务器,q且具备扩展能力{优炏V随 Modello.ajax 工具集提供的 proxy ?php 写成Q可q行 php 的服务器都可以安装。(以上内容转自《Ajax Wing: 跨域Ajax工具: Modello.ajax?/a>Q?/p>
使用Modello的代码如下: <script type="text/javascript" src="js/modello.js"></script> <script> var url = "var response = urlget(url); var myresult = response.getXML(); alert("Ajax提取Q?+myresult.childNodes[1].childNodes[0].childNodes[0].text+"”成?); </script>
<script type="text/javascript" src="js/modello.ajax.js"></script>
Define('URLGET_PROXY', 'jsproxy.php');
var urlget = Class.get('modello.ajax.Urllib').urlget;
alert("跨域hURL地址"+url);
]]>