﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-SIMONE-随笔分类-AJAX</title><link>http://www.blogjava.net/wangxinsh55/category/9540.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 25 Jun 2007 10:33:23 GMT</lastBuildDate><pubDate>Mon, 25 Jun 2007 10:33:23 GMT</pubDate><ttl>60</ttl><item><title>jQuery 与 prototype 共存</title><link>http://www.blogjava.net/wangxinsh55/archive/2007/06/25/126168.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Mon, 25 Jun 2007 09:48:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2007/06/25/126168.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/126168.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2007/06/25/126168.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/126168.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/126168.html</trackback:ping><description><![CDATA[<p class=Title>方法一：</p>
<pre><code>&lt;html&gt;&nbsp; <br>&nbsp;&lt;head&gt;&nbsp; <br>&nbsp;&nbsp; &lt;script src="prototype.js"&gt;&lt;/script&gt;&nbsp; <br>&nbsp;&nbsp; &lt;script src="jquery.js"&gt;&lt;/script&gt;&nbsp; <br>&nbsp;&nbsp; &lt;script&gt;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; jQuery.noConflict();&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; // Use jQuery via jQuery(...)&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; jQuery(document).ready(function(){&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jQuery("div").hide();&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; });&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; // Use Prototype with $(...), etc.&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; $('someid').style.display = 'none';&nbsp;&nbsp; <br>&nbsp;&nbsp; &lt;/script&gt;&nbsp; <br>&nbsp;&lt;/head&gt;&nbsp; <br>&nbsp;&lt;body&gt;&lt;/body&gt;&nbsp; <br>&nbsp;&lt;/html&gt;</code></pre>
<p class=Title>方法二：</p>
<pre><code>&lt;html&gt;&nbsp; <br>&nbsp;&lt;head&gt;&nbsp; <br>&nbsp;&nbsp; &lt;script src="prototype.js"&gt;&lt;/script&gt;&nbsp; <br>&nbsp;&nbsp; &lt;script src="jquery.js"&gt;&lt;/script&gt;&nbsp; <br>&nbsp;&nbsp; &lt;script&gt;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; var $j = jQuery.noConflict();&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; // Use jQuery via $j(...)&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; $j(document).ready(function(){&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $j("div").hide();&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; });&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; // Use Prototype with $(...), etc.&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; $('someid').style.display = 'none';&nbsp;&nbsp; <br>&nbsp;&nbsp; &lt;/script&gt;&nbsp; <br>&nbsp;&lt;/head&gt;&nbsp; <br>&nbsp;&lt;body&gt;&lt;/body&gt;&nbsp; <br>&nbsp;&lt;/html&gt;&nbsp; </code></pre>
<p class=Title>方法三：</p>
<pre><code>&lt;html&gt;&nbsp; <br>&nbsp;&lt;head&gt;&nbsp; <br>&nbsp;&nbsp; &lt;script src="prototype.js"&gt;&lt;/script&gt;&nbsp; <br>&nbsp;&nbsp; &lt;script src="jquery.js"&gt;&lt;/script&gt;&nbsp; <br>&nbsp;&nbsp; &lt;script&gt;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; jQuery.noConflict();&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; // Put all your code in your document ready area&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; jQuery(document).ready(function($){&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Do jQuery stuff using $&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $("div").hide();&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; });&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; // Use Prototype with $(...), etc.&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; $('someid').style.display = 'none';&nbsp;&nbsp; <br>&nbsp;&nbsp; &lt;/script&gt;&nbsp; <br>&nbsp;&lt;/head&gt;&nbsp; <br>&nbsp;&lt;body&gt;&lt;/body&gt;&nbsp; <br>&nbsp;&lt;/html&gt;&nbsp; </code></pre>
<br>
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/126168.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2007-06-25 17:48 <a href="http://www.blogjava.net/wangxinsh55/archive/2007/06/25/126168.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>推荐--jQuery使用手册 </title><link>http://www.blogjava.net/wangxinsh55/archive/2007/06/25/126166.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Mon, 25 Jun 2007 09:36:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2007/06/25/126166.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/126166.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2007/06/25/126166.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/126166.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/126166.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 翻译整理：Young.J官方网站：http://jquery.com&nbsp;&nbsp;&nbsp; jQuery是一款同prototype一样优秀js开发库类，特别是对css和XPath的支持，使我们写js变得更加方便！如果你不是个js高手又想写出优 秀的js效果，jQuery可以帮你达到目的！&nbsp;&nbsp; 下载地址：Starterkit （http://jquery.bassi...&nbsp;&nbsp;<a href='http://www.blogjava.net/wangxinsh55/archive/2007/06/25/126166.html'>阅读全文</a><img src ="http://www.blogjava.net/wangxinsh55/aggbug/126166.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2007-06-25 17:36 <a href="http://www.blogjava.net/wangxinsh55/archive/2007/06/25/126166.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jQuery中文入门指南，翻译加实例，jQuery的起点教程</title><link>http://www.blogjava.net/wangxinsh55/archive/2007/06/25/126164.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Mon, 25 Jun 2007 09:34:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2007/06/25/126164.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/126164.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2007/06/25/126164.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/126164.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/126164.html</trackback:ping><description><![CDATA[<h1>jQuery中文入门指南，翻译加实例，jQuery的起点教程</h1>
<div>
<h3>中文版译者：<a href="http://keelsike.blogspot.com/">Keel</a></h3>
<p>此文以实例为基础一步步说明了jQuery的工作方式。现以中文翻译（添加我的补充说明）如下。如有相关意见或建议请麻烦到我的 <a href="http://keelsike.blogspot.com/">BLOG</a> 写个回复或者 <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#107;&#101;&#101;&#108;&#46;&#115;&#105;&#107;&#101;&#37;&#50;&#56;&#97;&#116;&#37;&#50;&#57;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;">EMAIL</a> 告知。</p>
<p>英文原版：<a href="http://jquery.bassistance.de/jquery-getting-started.html">http://jquery.bassistance.de/jquery-getting-started.html</a> ，感谢原文作者 <a href="http://bassistance.de/">J&#246;rn Zaefferer</a></p>
<p><strong>本文发布已征求原作者同意。</strong> </p>
<p>另外我认为在学习过程中,有两个API文档你要打开随时查看:</p>
<ul>
    <li><a href="http://jquery.com/api/">http://jquery.com/api/</a>
    <li><a href="http://visualjquery.com/">http://visualjquery.com/</a></li>
</ul>
</div>
<h4>以下部分为原文翻译:</h4>
<hr>
<div>
<h2>jQuery入门指南教程</h2>
<p>这个指南是一个对jQuery库的说明，要求读者了解HTML(DOM)和CSS的一些常识。它包括了一个简单的Hello World的例子，选择器和事件基础，AJAX、FX的用法，以及如何制作jQuery的插件。 这个指南包括了很多代码，你可以copy它们，并试着修改它们，看看产生的效果。 </p>
<h2>内容提要</h2>
<ol>
    <li><a href="http://www.k99k.com/jQuery_getting_started.html#setup">安装</a>
    <li><a href="http://www.k99k.com/jQuery_getting_started.html#hello">Hello jQuery</a>
    <li><a href="http://www.k99k.com/jQuery_getting_started.html#find">Find me:使用选择器和事件</a>
    <li><a href="http://www.k99k.com/jQuery_getting_started.html#rate">Rate me:使用AJAX</a>
    <li><a href="http://www.k99k.com/jQuery_getting_started.html#">Animate me(让我生动起来):使用FX</a>
    <li><a href="http://www.k99k.com/jQuery_getting_started.html#sort">Sort me(将我有序化):使用tablesorter插件(表格排序)</a>
    <li><a href="http://www.k99k.com/jQuery_getting_started.html#plug">Plug me:制作您自己的插件</a>
    <li><a href="http://www.k99k.com/jQuery_getting_started.html#next">Next steps(下一步)</a></li>
</ol>
</div>
<div>
<h2 id=setup>安装</h2>
<p>一开始,我们需要一个jQuery的库,最新的下载可以到<a href="http://jquery.com/src/">这里</a>找到。这个指南提供一个基本包含实例的包供下载.</p>
<p>下载：<a class=download href="http://www.k99k.com/jquery-starterkit.zip">jQuery Starterkit</a></p>
<p class=log>(译者Keel注:一定要下载这个包，光看文章不实践肯定是不行的。) </p>
<p class=instruction>下载后解压缩，然后用你最喜欢的文本编辑器打开starterkit.html和custom.js这两个文件。<span class=log>(译者Keel注:这两个就是例子文件,所有的例子都用这两个例子作出,custom.js写jQuery代码,starterkit.html观察效果.建议用editPlus打开) </span></p>
<p>现在,我们就已经做好了一切准备来进行这个著名的"Hello world"例子.</p>
<h4>本章的相关链接:</h4>
<ul>
    <li><a href="http://www.k99k.com/jquery-starterkit.zip">Starterkit</a>
    <li><a href="http://jquery.com/src/">jQuery Downloads</a></li>
</ul>
</div>
<div>
<h2 id=hello>Hello jQuery</h2>
<p>在做所有事情之前,我们要让jQuery读取和处理文档的DOM,必须尽可能快地在DOM载入后开始执行事件,所以,我们用一个ready事件作为处理HTML文档的开始.看看我们打开的custom.js这个文件,里面已经准备好了:</p>
<pre>$(document).ready(function() {<br>	// do stuff when DOM is ready<br>});</pre>
<p>放一个简单的alert事件在需要等DOM完成载入,所以我们把任务稍稍变复杂一点:在点击任何一个链接时显示一个alert.</p>
<pre>$(document).ready(function() {<br>	$("a").click(function() {<br>		alert("Hello world!");<br>	});<br>});</pre>
<p>这样在你点击页面的一个链接时都会触发这个"Hello world"的提示。</p>
<p class=log>(译者Keel注:请照此代码修改custom.js并保存,然后用浏览器打开starterkit.html观察效果。)</p>
<p>让我们看一下这些修改是什么含义。$("a") 是一个jQuery选择器(selector),在这里，它选择所有的a标签<span class=log>（译者Keel注：即&lt;a&gt;&lt;/a&gt;）</span>，$ 号是 jQuery &#8220;类&#8221;(jQuery "class")的一个别称，因此$()构造了一个新的jQuery 对象(jQuery object)。函数 click() 是这个jQuery对象的一个方法，它绑定了一个单击事件到所有选中的标签(这里是所有的a标签),并在事件触发时执行了它所提供的alert方法.</p>
<p>这里有一个拟行相似功能的代码:</p>
<pre>&lt;a href="#" onclick="alert('Hello world')"&gt;Link&lt;/a&gt;</pre>
<p>不同之处很明显,用jQuery不需要在每个a标签上写onclick事件,所以我们拥有了一个整洁的结构文档(HTML)和一个行为文档(JS),达到了将结构与行为分开的目的,就像我们使用CSS追求的一样.</p>
<p>下面我们会更多地了解到选择器与事件.</p>
<h4>本章的相关链接:</h4>
<ul>
    <li><a href="http://jquery.com/docs/Base/">jQuery Base</a>
    <li><a href="http://jquery.com/docs/Base/Expression/">jQuery Expressions</a>
    <li><a href="http://jquery.com/docs/Base/Events/">jQuery Basic Events</a></li>
</ul>
</div>
<div>
<h2 id=find>Find me:使用选择器和事件</h2>
<p>jQuery提供两种方式来选择html的 elements，第一种是用CSS和Xpath选择器联合起来形成一个字符串来传送到jQuery的构造器（如：$("div &gt; ul a")）；第二种是用jQuery对象的几个methods(方法)。这两种方式还可以联合起来混合使用。</p>
<p>为了测试一下这些选择器，我们来试着在我们starterkit.html中选择并修改第一个ordered list.</p>
<p>一开始，我们需要选择这个list本身，这个list有一个ID叫&#8220;orderedlist&#8221;，通常的javascript写法是document.getElementById("orderedlist").在jQuery中，我们这样做：</p>
<pre>$(document).ready(function() {<br>	$("#orderedlist").addClass("red");<br>});</pre>
<p>这里将starterkit中的一个CSS样式red附加到了orderedlist上<span class=log>(译者Keel注：参考测试包中的css目录下的core.css，其中定义了red样式)</span>。因此，在你刷新了starterkit.html后，你将会看到第一个有序列表(ordered list )背景色变成了红色，而第二个有序列表没有变化.</p>
<p>现在，让我们添加一些新的样式到list的子节点.</p>
<pre>$(document).ready(function() {<br>	$("#orderedlist &gt; li").addClass("blue");<br>});</pre>
<p>这样，所有orderedlist中的li都附加了样式"blue"。</p>
<p>现在我们再做个复杂一点的，当把鼠标放在li对象上面和移开时进行样式切换，但只在list的最后一个element上生效。</p>
<pre>$(document).ready(function() {<br>	$("#orderedlist li:last").hover(function() {<br>		$(this).addClass("green");<br>	}, function() {<br>		$(this).removeClass("green");<br>	});<br>});</pre>
<p>还有大量的类似的<a class=doc title="Documentation for CSS selectors" href="http://jquery.com/docs/Base/Expression/CSS/">CSS</a>和<a class=doc title="Documentation for XPath selectors" href="http://jquery.com/docs/Base/Expression/XPath/">XPath</a>例子，更多的例子和列表可以在<a class=doc title="Documentation for base selectors" href="http://jquery.com/docs/Base/Expression/">这里</a>找到。<span class=log>（译者Keel注：入门看此文，修行在个人，要想在入门之后懂更多，所以这段话的几个链接迟早是要必看的！不会又要翻译吧...^_^!）</span></p>
<p>每一个onXXX事件都有效，如onclick,onchange,onsubmit等，都有jQuery等价表示方法<span class=log>（译者Keel注：jQuery不喜欢onXXX，所以都改成了XXX，去掉了on）</span>。<a class=doc title="Documentation for advanced events" href="http://jquery.com/docs/EventModule/">其他的一些事件</a>，如ready和hover,也提供了相应的方法。</p>
<p>你可以在<a href="http://visualjquery.com/">Visual jQuery</a>找到全部的事件列表，在Events栏目下.</p>
<p>用这些选择器和事件你已经可以做很多的事情了，但这里有一个更强的好东东！</p>
<pre>$(document).ready(function() {<br>	$("#orderedlist").find("li").each(function(i) {<br>		$(this).html( $(this).html() + " BAM! " + i );<br>	});<br>});</pre>
<p>find() 让你在已经选择的element中作条件查找,因此 $("#orderedlist).find("li") 就像 $("#orderedlist li"). each()一样迭代了所有的li，并可以在此基础上作更多的处理。 大部分的方法,如addClass(), 都可以用它们自己的 each() 。在这个例子中, html()用来获取每个li的html文本, 追加一些文字，并将之设置为li的html文本。<span class=log>（译者Keel注：从这个例子可以看到.html()方法是获取对象的html代码，而.html('xxx')是设置'xxx'为对象的html代码）</span></p>
<p>另一个经常碰到的任务是在没有被jQuery覆盖的DOM元素上call一些方法，想像一个在你用AJAX方式成功提交后的reset：</p>
<pre>$(document).ready(function() {<br>	// use this to reset a single form<br>	$("#reset").click(function() {<br>		$("#form")[0].reset();<br>	});<br>});</pre>
<p class=log>（译者Keel注：这里作者将form的id也写成了form，源文件有&lt;form id="form"&gt;，这是非常不好的写法，你可以将这个ID改成form1或者testForm，然后用$("#form1")或者$ ("#testForm")来表示它，再进行测试。）</p>
<p>这个代码选择了所有ID为"form"的元素，并在其第一个上call了一个reset()。如果你有一个以上的form，你可以这样做：</p>
<pre>$(document).ready(function() {<br>	// use this to reset several forms at once<br>	$("#reset").click(function() {<br>		$("form").each(function() {<br>			this.reset();<br>		});<br>	});<br>});</pre>
<p class=log>（译者Keel注：请注意一定要亲自将这些代码写在custom.js中并在starterkit.html上测试效果才能有所体会！必要时要观察starterkit.html的html代码）</p>
<p>这样你在点击Reset链接后，就选择了文档中所有的form元素，并对它们都执行了一次reset()。</p>
<p>还 有一个你可能要面对的问题是不希望某些特定的元素被选择。jQuery 提供了filter() 和not() 方法来解决这个问题。 filter()以过滤表达式来减少不符合的被选择项, not()则用来取消所有符合过滤表达式的被选择项. 考虑一个无序的list，你想要选择所有的没有ul子元素的li元素。</p>
<pre>$(document).ready(function() {<br>	$("li").not("[ul]").css("border", "1px solid black");<br>});</pre>
<p>这个代码选择了所有的li元素，然后去除了没有ul子元素的li元素。刷新浏览器后，所有的li元素都有了一个边框，只有ul子元素的那个li元素例外。</p>
<p class=log>（译 者Keel注：请注意体会方便之极的css()方法，并再次提醒请务必实际测试观察效果，比方说换个CSS样式呢？再加一个CSS样式呢？像这样：$ ("li").not("[ul]").css("border", "1px solid black").css("color","red");）</p>
<p>上面代码中的[expression] 语法是从XPath而来，可以在子元素和属性(elements and attributes)上用作过滤器，比如你可能想选择所有的带有name属性的链接:</p>
<pre>$(document).ready(function() {<br>	$("a[@name]").background("#eee");<br>});</pre>
<p>这个代码给所有带有name属性的链接加了一个背景色。<span class=log>（译者Keel注：这个颜色太不明显了，建议写成$("a[@name]").background("red");）</span></p>
<p>更常见的情况是以name来选择链接，你可能需要选择一个有特点href属性的链接，这在不同的浏览器下对href的理解可能会不一致，所以我们的部分匹配("*=")的方式来代替完全匹配("=")：</p>
<pre>$(document).ready(function() {<br>	$("a[@href*=/content/gallery]").click(function() {<br>		// do something with all links that point somewhere to /content/gallery<br>	});<br>});</pre>
<p>到现在为止，选择器都用来选择子元素或者是过滤元素。另外还有一种情况是选择上一个或者下一个元素，比如一个FAQ的页面，答案首先会隐藏，当问题点击时，答案显示出来，jQuery代码如下：</p>
<pre>$(document).ready(function() {<br>	$('#faq').find('dd').hide().end().find('dt').click(function() {<br>         var answer = $(this).next();<br>         if (answer.is(':visible')) {<br>             answer.slideUp();<br>         } else {<br>             answer.slideDown();<br>         }<br>     });<br>});</pre>
<p>这 里我们用了一些链式表达法来减少代码量，而且看上去更直观更容易理解。像'#faq' 只选择了一次，利用end()方法，第一次find()方法会结束(undone)，所以我们可以接着在后面继续find('dt')，而不需要再写$ ('#faq').find('dt')。</p>
<p>在点击事件中的，我们用 $(this).next() 来找到dt下面紧接的一个dd元素，这让我们可以快速地选择在被点击问题下面的答案。</p>
<p class=log>（译 者Keel注：这个例子真是太酷了，FAQ中的答案可以收缩！从利用next()的思路到实现这些效果都有很多地方需要我们消化，注意 if (answer.is(':visible'))用法，注意answer.slideUp();不懂的地方赶紧查我在最开始提到的两个必看API文档）</p>
<p>除了选择同级别的元素外，你也可以选择父级的元素。可能你想在用户鼠标移到文章某段的某个链接时，它的父级元素--也就是文章的这一段突出显示，试试这个：</p>
<pre>$(document).ready(function() {<br>	$("a").hover(function() {<br>		$(this).parents("p").addClass("highlight");<br>	}, function() {<br>		$(this).parents("p").removeClass("highlight");<br>	});<br>});</pre>
<p>测试效果可以看到，移到文章某段的链接时，它所在的段全用上highlight样式，移走之后又恢复原样。</p>
<span class=log>（译者Keel注：highlight是core.css中定义的样式，你也可以改变它，注意这里有第二个function()这是hover方法的特点，请在API文档中查阅hover，上面也有例子说明）</span>
<p>在我们继续之前我们先来看看这一步： jQuery会让代码变得更短从而更容易理解和维护，下面是$(document).ready(callback)的缩写法：</p>
<pre>$(function() {<br>	// code to execute when the DOM is ready<br>});</pre>
<p>应用到我们的Hello world例子中，可以这样:</p>
<pre>$(function() {<br>	$("a").click(function() {<br>		alert("Hello world!");<br>	});<br>});</pre>
<p>现在，我们手上有了这些基础的知识，我们可以更进一步的探索其它方面的东西，就从AJAX开始！</p>
<h4>本章的相关链接:</h4>
<ul>
    <li><a href="http://jquery.com/api/">jQuery API documentation</a>
    <li><a href="http://visualjquery.com/">Visual jQuery - A categorized browsable API documentation</a>
    <li><a href="http://jquery.com/docs/Base/Expression/CSS/">jQuery Expressions: CSS</a>
    <li><a href="http://jquery.com/docs/Base/Expression/XPath/">jQuery Expressions: XPath</a>
    <li><a href="http://jquery.com/docs/Base/Expression/Custom/">jQuery Expressions: Custom</a>
    <li><a href="http://jquery.com/docs/EventModule/">jQuery Special Events</a>
    <li><a href="http://jquery.com/docs/Base/Traverse/">jQuery DOM Traversing</a></li>
</ul>
</div>
<div>
<h2 id=rate>Rate me:使用AJAX</h2>
<p>在这一部分我们写了一个小小的AJAX应用，它能够rate一些东西<span class=log>（译Keel注：就是对某些东西投票）</span>，就像在youtube.com上面看到的一样。</p>
<p>首先我们需要一些服务器端代码，这个例子中用到了一个PHP文件，读取rating参数然后返回rating总数和平均数。看一下<a href="http://www.k99k.com/rate.phps">rate.php</a>代码.</p>
<p>虽然这些例子也可以不使用AJAX来实现，但显示我们不会那么做，我们用jQuery生成一个DIV容器，ID是"rating".</p>
<pre>$(document).ready(function() {<br>	// generate markup<br>	var ratingMarkup = ["Please rate: "];<br>	for(var i=1; i &lt;= 5; i++) {<br>		ratingMarkup[ratingMarkup.length] = "&lt;a href='#'&gt;" + i + "&lt;/a&gt;&nbsp;";<br>	}<br>	// add markup to container and applier click handlers to anchors<br>	$("#rating").append( ratingMarkup.join('') ).find("a").click(function(e) {<br>		e.preventDefault();<br>		// send requests<br>		$.post("rate.php", {rating: $(this).html()}, function(xml) {<br>			// format result<br>			var result = [<br>				"Thanks for rating, current average: ",<br>				$("average", xml).text(),<br>				", number of votes: ",<br>				$("count", xml).text()<br>			];<br>			// output result<br>			$("#rating").html(result.join(''));<br>		} );<br>	});<br>});</pre>
<p>这段代码生成了5个链接，并将它们追加到id为"rating"容器中，当其中一个链接被点击时，该链接标明的分数就会以rating参数形式发送到rate.php，然后，结果将以XML形式会从服务器端传回来，添加到容器中，替代这些链接。</p>
<p>如果你没有一个安装过PHP的webserver，你可以看看这个<a href="http://www.k99k.com/example-rateme.html">在线的例子</a>.</p>
<p>不使用javascript实现的例子可以访问 <a href="http://www.softonic.de/ie/51494">softonic.de</a> 点击 "Kurz bewerten!"</p>
<p>更多的AJAX方法可以从<a class=doc title="Documentation for AJAX methods" href="http://jquery.com/docs/AJAXModule/">这里</a> 找到，或者看看<a href="http://visualjquery.com/">API文档</a> 下面的AJAX filed under AJAX.</p>
<p class=log>（译者Keel注：这个在线实例从国内访问还是比较慢的，点击后要等一会儿才能看到结果，可以考虑对它进行修改，比如加上loading，投票后加上再投票的返回链接等。此外，这个例子中还是有很多需要进一步消化的地方，看不懂的地方请参考API文档。）</p>
<p>一个在使用AJAX载入内容时经常发生的问题是：当载入一个事件句柄到一个HTML文档时，还需要在载入内容上应用这些事件，你不得不在内容加载完成后应用这些事件句柄，为了防止代码重复执行，你可能用到如下一个function:</p>
<pre>// lets use the shortcut<br>$(function() {<br>	var addClickHandlers = function() {<br>		$("a.clickMeToLoadContent").click(function() {<br>			$("#target").load(this.href, addClickHandlers);<br>		});<br>	};<br>	addClickHandlers();<br>});</pre>
<p>现在，addClickHandlers只在DOM载入完成后执行一次，这是在用户每次点击具有clickMeToLoadContent 这个样式的链接并且内容加载完成后.</p>
<p>请注意addClickHandlers函数是作为一个局部变量定义的，而不是全局变量(如：function addClickHandlers() {...})，这样做是为了防止与其他的全局变量或者函数相冲突.</p>
<p>另一个常见的问题是关于回调(callback)的参数。你可以通过一个额外的参数指定回调的方法，简单的办法是将这个回调方法包含在一个其它的function中:</p>
<pre>// get some data<br>var foobar = ...;<br>// specify handler, it needs data as a paramter<br>var handler = function(data) {<br>  ...<br>};<br>// add click handler and pass foobar!<br>$('a').click( function(event) { handler(foobar); } );<br><br>// if you need the context of the original handler, use apply:<br>$('a').click( function(event) { handler.apply(this, [foobar]); } );</pre>
<p>用到简单的AJAX后，我们可以认为已经非常之&#8220;web2.0&#8221;了，但是到现在为止，我们还缺少一些酷炫的效果。下一节将会谈到这些效果.</p>
<h4>本章的相关链接:</h4>
<ul>
    <li><a href="http://jquery.com/docs/AJAXModule/">jQuery AJAX Module</a>
    <li><a href="http://jquery.com/api/">jQuery API: Contains description and examples for append and all other jQuery methods</a>
    <li><a href="http://jquery.com/demo/thickbox/">ThickBox: A jQuery plugin that uses jQuery to enhance the famous lightbox</a></li>
</ul>
</div>
<div>
<h2 id=animate>Animate me(让我生动起来):使用FX</h2>
<p>一些动态的效果可以使用 <code>show()</code> 和 <code>hide()</code>来表现:</p>
<pre>$(document).ready(function() {<br>	$("a").toggle(function() {<br>		$(".stuff").hide('slow');<br>	}, function() {<br>		$(".stuff").show('fast');<br>	});<br>});</pre>
<p>你可以与 <code>animate()</code>联合起来创建一些效果,如一个带渐显的滑动效果:</p>
<pre>$(document).ready(function() {<br>	$("a").toggle(function() {<br>		$(".stuff").animate({<br>			height: 'hide',<br>			opacity: 'hide'<br>		}, 'slow');<br>	}, function() {<br>		$(".stuff").animate({<br>			height: 'show',<br>			opacity: 'show'<br>		}, 'slow');<br>	});<br>});</pre>
<p>很多不错的效果可以访问<a href="http://interface.eyecon.ro/">interface plugin collection</a>. 这个站点提供了很多demos和文档</p>
<p>这些效果插件是位于jQuery插件列表的前面的，当然也有很多其他的插件，比如我们下一章讲到的表格排序插件。</p>
<h4>本章的相关链接:</h4>
<ul>
    <li><a href="http://jquery.com/docs/FxModule/">jQuery FX Module</a>
    <li><a href="http://interface.eyecon.ro/">Interface plugin</a></li>
</ul>
</div>
<div>
<h2 id=sort>Sort me(将我有序化):使用tablesorter插件(表格排序)</h2>
<p>这个表格排序插件能让我们在客户端按某一列进行排序，引入jQuery和这个插件的js文件，然后告诉插件你想要哪个表格拥有排序功能。</p>
<p>要测试这个例子，先在starterkit.html中加上像下面这一行的代码：</p>
<pre>&lt;script src="lib/jquery.tablesorter.js" type="text/javascript"&gt;&lt;/script&gt;</pre>
<p>然后可以这样调用不着:</p>
<pre>$(document).ready(function() {<br>	$("#large").tableSorter();<br>});</pre>
<p>现在点击表格的第一行head区域，你可以看到排序的效果，再次点击会按倒过来的顺序进行排列。</p>
<p>这个表格还可以加一些突出显示的效果，我们可以做这样一个隔行背景色（斑马线）效果:</p>
<pre>$(document).ready(function() {<br>	$("#large").tableSorter({<br>		stripingRowClass: ['odd','even'],	// Class names for striping supplyed as a array.<br>		stripRowsOnStartUp: true		// Strip rows on tableSorter init.<br>	});<br>});</pre>
<p>关于这个插件的更多例子和文档可以在 <a href="http://motherrussia.polyester.se/jquery-plugins/tablesorter/">tablesorter首页</a>找到.</p>
<p>几乎所有的特件都是这样用的:先include插件的js文件,然后在某些元素上使用插件定义的方法,当然也有一些参数选项是可以配置的</p>
<p>经常更新的插件列表可以从jQuery官方站 <a title="Plugins for jQuery" href="http://jquery.com/plugins/">on the jQuery site</a>找到.</p>
<p>当你更经常地使用jQuery时,你会发现将你自己的代码打包成插件是很有用处的,它能方便地让你的公司或者其他人进行重用.下一章我们将谈到如何构建一个自己的插件.</p>
<h4>本章的相关链接:</h4>
<ul>
    <li><a href="http://jquery.com/plugins/">Plugins for jQuery</a>
    <li><a href="http://motherrussia.polyester.se/jquery-plugins/tablesorter/">Tablesorter Plugin</a></li>
</ul>
</div>
<div>
<h2 id=plug>Plug me:制作自己的插件</h2>
<p>写一个自己的jQuery插件是非常容易的,如果你按照下面的原则来做,可以让其他人也容易地结合使用你的插件.</p>
<ol>
    <li>为你的插件取一个名字,在这个例子里面我们叫它"foobar".
    <li>创建一个像这样的文件:jquery.[yourpluginname].js,比如我们创建一个jquery.foobar.js
    <li>创建一个或更多的插件方法,使用继承jQuery对象的方式,如:
    <pre>jQuery.fn.foobar = function() {<br>	// do something<br>};</pre>
    <li>可选的:创建一个用于帮助说明的函数,如:
    <pre>jQuery.fooBar = {<br>	height: 5,<br>	calculateBar = function() { ... },<br>	checkDependencies = function() { ... }<br>};</pre>
    <p>你现在可以在你的插件中使用这些帮助函数了:</p>
    <pre>jQuery.fn.foobar = function() {<br>	// do something<br>	jQuery.foobar.checkDependencies(value);<br>	// do something else<br>};</pre>
    <li>可选的l:创建一个默认的初始参数配置,这些配置也可以由用户自行设定,如:
    <pre>jQuery.fn.foobar = function(options) {<br>	var settings = {<br>		value: 5,<br>		name: "pete",<br>		bar: 655<br>	};<br>	if(options) {<br>		jQuery.extend(settings, options);<br>	}<br>};</pre>
    <p>现在可以无需做任何配置地使用插件了,默认的参数在此时生效:</p>
    <pre>$("...").foobar();</pre>
    <p>或者加入这些参数定义:</p>
    <pre>$("...").foobar({<br>	value: 123,<br>	bar: 9<br>});</pre>
    </li>
</ol>
<p>如果你release你的插件, 你还应该提供一些例子和文档,大部分的插件都具备这些良好的参考文档.</p>
<p>现在你应该有了写一个插件的基础,让我们试着用这些知识写一个自己的插件.</p>
<p>很多人试着控制所有的radio或者checkbox是否被选中,比如:</p>
<pre>$("input[@type='checkbox']").each(function() {<br>	this.checked = true;<br>	// or, to uncheck<br>	this.checked = false;<br>	// or, to toggle<br>	this.checked = !this.checked;<br>});</pre>
<p>无论何时候，当你的代码出现each时，你应该重写上面的代码来构造一个插件,很直接地:</p>
<pre>$.fn.check = function() {<br>	return this.each(function() {<br>		this.checked = true;<br>	});<br>};</pre>
<p>这个插件现在可以这样用:</p>
<pre>$("input[@type='checkbox']").check();</pre>
<p>现在你应该还可以写出uncheck()和toggleCheck()了.但是先停一下,让我们的插件接收一些参数.</p>
<pre>$.fn.check = function(mode) {<br>	var mode = mode || 'on'; // if mode is undefined, use 'on' as default<br>	return this.each(function() {<br>		switch(mode) {<br>		case 'on':<br>			this.checked = true;<br>			break;<br>		case 'off':<br>			this.checked = false;<br>			break;<br>		case 'toggle':<br>			this.checked = !this.checked;<br>			break;<br>		}<br>	});<br>};</pre>
<p>这里我们设置了默认的参数,所以将"on"参数省略也是可以的,当然也可以加上"on","off", 或 "toggle",如:</p>
<pre>$("input[@type='checkbox']").check();<br>$("input[@type='checkbox']").check('on');<br>$("input[@type='checkbox']").check('off');<br>$("input[@type='checkbox']").check('toggle');</pre>
<p>如果有多于一个的参数设置会稍稍有点复杂,在使用时如果只想设置第二个参数,则要在第一个参数位置写入null.</p>
<p>从上一章的tablesorter插件用法我们可以看到,既可以省略所有参数来使用或者通过一个 key/value 对来重新设置每个参数.</p>
<p>作为一个练习,你可以试着将 <a href="http://www.k99k.com/jQuery_getting_started.html#rate">第四章</a> 的功能重写为一个插件.这个插件的骨架应该是像这样的:</p>
<pre>$.fn.rateMe = function(options) {<br>	var container = this; // instead of selecting a static container with $("#rating"), we now use the jQuery context<br>	<br>	var settings = {<br>		url: "rate.php"<br>		// put more defaults here<br>		// remember to put a comma (",") after each pair, but not after the last one!<br>	};<br>	<br>	if(options) { // check if options are present before extending the settings<br>		$.extend(settings, options);<br>	}<br>	<br>	// ...<br>	// rest of the code<br>	// ...<br>	<br>	return this; // if possible, return "this" to not break the chain<br>});</pre>
</div>
<div>
<h2 id=next>Next steps(下一步)</h2>
<p>如果你想做更好的javascript开发,建议你使用一个叫 <a href="http://www.joehewitt.com/software/firebug/">FireBug</a>的firefox插件. 它提供了断点调试(比alert强多了)、观察DOM变化等很多漂亮的功能</p>
<p>如果你还有未解决的问题，或者新的想法与建议，你可以使用jQuery的邮件列表 <a href="http://jquery.com/discuss">jQuery mailing list</a>.</p>
<p>关于这个指南的任何事情，你可以写<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#101;&#110;&#99;&#104;&#111;&#115;&#37;&#50;&#48;&#37;&#53;&#66;&#97;&#116;&#37;&#53;&#68;&#37;&#50;&#48;&#103;&#109;&#120;&#37;&#50;&#48;&#37;&#53;&#66;&#100;&#111;&#116;&#37;&#53;&#68;&#37;&#50;&#48;&#110;&#101;&#116;">mail</a>给作者或者发表评论在他的日志：<a href="http://bassistance.de/index.php/2006/09/12/jquery-getting-started-guide/">blog</a>.</p>
<p class=log>关于这个指南的翻译任何事情，你可以写<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#107;&#101;&#101;&#108;&#46;&#115;&#105;&#107;&#101;&#37;&#53;&#66;&#97;&#116;&#37;&#53;&#68;&#37;&#50;&#48;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;">mail</a>给我或者发表评论在我的日志：<a href="http://keelsike.blogspot.com/">blog</a>.</p>
</div>
<div>
<h3>还有什么...</h3>
<p>大大感谢John Resig创造了这么好的library! 感谢jQuery community 为John提供了如此多的咖啡和其他的一切!</p>
</div>
<h4><a href="http://bassistance.de/">&#169; 2006, J&#246;rn Zaefferer</a> - last update: 2006-09-12</h4>
<h4>中文版翻译:<a href="http://keelsike.blogspot.com/">Keel</a> - 最后更新: 2006-12-13</h4>
<script src="http://www.google-analytics.com/urchin.js" type=text/javascript></script>
<script type=text/javascript>_uacct = "UA-333331-1";urchinTracker();</script>
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/126164.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2007-06-25 17:34 <a href="http://www.blogjava.net/wangxinsh55/archive/2007/06/25/126164.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ajax缓存问题</title><link>http://www.blogjava.net/wangxinsh55/archive/2007/02/08/98642.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Thu, 08 Feb 2007 01:15:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2007/02/08/98642.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/98642.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2007/02/08/98642.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/98642.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/98642.html</trackback:ping><description><![CDATA[
		<p>使用Ajax中遇到的一个问题，手动刷新页面时，没有提交到后台处理，总显示第一次载入的数据。<br />页头已加入防缓存设置：<br />&lt;meta http-equiv="pragma" content="no-cache"&gt;<br />&lt;meta http-equiv="cache-control" content="no-cache"&gt;<br />&lt;meta http-equiv="expires" content="0"&gt;<br />可结果依旧。<br />baidu了一下，找到相关资料。<br />解决方法：让提交的URL每次都向服务器端发送请求，而不是使用缓存。<br />方法一：加时间戳 var url = BaseURL + "&amp;timeStamp=" + new Date().getTime();<br />方法二：加随机数 var url = BaseURL + "&amp;r=" + Math.random();<br />方法三：自已想。。。</p>
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/98642.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2007-02-08 09:15 <a href="http://www.blogjava.net/wangxinsh55/archive/2007/02/08/98642.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>无尽的任务 JSON </title><link>http://www.blogjava.net/wangxinsh55/archive/2007/01/04/91708.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Thu, 04 Jan 2007 03:03:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2007/01/04/91708.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/91708.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2007/01/04/91708.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/91708.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/91708.html</trackback:ping><description><![CDATA[
		<p>技术饭还真是不好吃,今天为了搞定眼下这个难题,选择了Ajax.在看Ajax的时候看到了Json.这个东西看着不错,好吧,上网去down个用.</p>
		<p>打开网站开始寻找我的目标,发现这个东西居然有好多版本.比如</p>
		<li>JSON in ActionScript: 
<ul><li><a href="http://www.schaffhausen.de/downloads/json.html">ActionScript1</a>. 
</li><li><a href="http://www.theorganization.net/work/jos/JSON.as">ActionScript2</a>. </li></ul><ul><li><a href="http://labs.adobe.com/wiki/index.php/ActionScript_3:resources:apis:libraries#corelib">ActionScript3</a>. </li></ul></li>
		<li>
				<a href="http://oss.metaparadigm.com/json-c/">JSON in C</a>. 
<ul><li><a href="http://www.json.org/JSON_checker/">JSON_checker</a>. </li></ul></li>
		<li>JSON in C++: 
<ul><li><a href="http://sourceforge.net/projects/jsoncpp/">jsoncpp</a>. 
</li><li><a href="http://cvs.sourceforge.net/viewcvs.py/zoolib/zoolib/src_other/misc/">zoolib</a>. </li></ul></li>
		<li>JSON in C#: 
<ul><li><a href="http://jayrock.berlios.de/">Jayrock</a>. 
</li><li><a href="http://www.newtonsoft.com/products/json/">Newtonsoft Json.NET</a>. </li></ul></li>
		<li>JSON in Cold Fusion. 
<ul><li><a href="http://jehiah.com/projects/cfjson/">CFJSON</a>. 
</li><li><a href="http://cfopen.org/projects/json-serializer/%20">JSON Serializer</a>. </li></ul></li>
		<li>
				<a href="https://sourceforge.net/projects/is-webstart/">JSON in Delphi</a>. 
</li>
		<li>JSON in <a href="http://erights.org/data/terml/embeddings.html">E</a>. 
</li>
		<li>
				<a href="http://www.erlang-projects.org/Public/news/ejson/view">JSON in Erlang</a>. 
</li>
		<li>JSON in Java: 
<ul><li><a href="http://www.json.org/java/index.html">org.json</a>. 
</li><li><a href="http://json-lib.sourceforge.net/">Json-lib</a>. 
</li><li><a href="http://developer.berlios.de/projects/jsontools/">JSON Tools</a>. 
</li><li><a href="http://www.json.org/java/simple.txt">org.json.simple</a>. 
</li><li><a href="http://blog.stringtree.org/2006/08/12/json/">Stringtree</a>. </li></ul></li>
		<li>
				<a href="http://www.json.org/js.html">JSON in JavaScript</a>. 
</li>
		<li>JSON in Lisp: 
<ul><li><a href="http://common-lisp.net/project/cl-json/">Common Lisp</a>. 
</li><li><a href="http://edward.oconnor.cx/elisp/json.el">Emacs Lisp</a>. 
</li><li><a href="http://www.call-with-current-continuation.org/eggs/json.html">Chicken Scheme</a>. 
</li><li><a href="http://www.lshift.net/blog/2005/08/22/json-for-mzscheme-and-a-portable-packrat-parsing-combinator-library">MZScheme</a>. </li></ul></li>
		<li>
				<a href="http://json.luaforge.net/">JSON in Lua</a>. 
</li>
		<li>
				<a href="http://sourceforge.net/projects/json">JSON in ML and Ruby</a>. 
</li>
		<li>
				<a href="http://blakeseely.com/blog/archives/2006/03/29/bsjsonadditions-12/">JSON in Objective C</a>. 
</li>
		<li>
				<a href="http://freshmeat.net/projects/ocaml-json/">JSON in Objective CAML</a>. 
</li>
		<li>
				<a href="http://osteele.com/sources/openlaszlo/json/">JSON in OpenLaszlo</a>. 
</li>
		<li>
				<a href="http://search.cpan.org/dist/JSON/">JSON in Perl</a>. 
</li>
		<li>JSON in PHP: 
<ul><li><a href="http://framework.zend.com/manual/en/zend.json.html">Zend_JSON</a></li><li><a href="http://mike.teczno.com/json.html">JSON-PHP</a>. 
</li><li><a href="http://www.aurore.net/projects/php-json/">PHP-JSON</a>. 
</li><li><a href="http://pear.php.net/pepr/pepr-proposal-show.php?id=198">Services_JSON</a>. 
</li><li><a href="http://freshmeat.net/projects/json_php_package/">JSON PHP</a>. </li></ul></li>
		<li>
				<a href="http://undefined.org/python/#simple_json">JSON in Python</a>. 
</li>
		<li>
				<a href="http://www.json.org/json.r">JSON in Rebol</a>. 
</li>
		<li>
				<a href="http://rubyforge.org/snippet/detail.php?type=snippet&amp;id=29">JSON in Ruby</a>. 
</li>
		<li>
				<a href="http://map1.squeakfoundation.org/sm/package/d38bdc2d-e52a-4167-ae73-2cf438c65c2f">JSON in Squeak</a>. 
<p>说实话,看到这些玩意,心里面顿时是凉了半截.</p><p>好多名词!!!</p><p>.看着这些东西感觉自己特别无知.幸好大多脸熟,心里面的虚荣心还没有跌倒低谷.</p><p>点击一个链接,比现在多一倍的新链接出现在眼前,每一个链接代表一个知识点.页面呈现的一瞬间理智立刻崩溃了.只是一个名不见经传的json就有如此之多的知识,那么其他的.......面对无穷无尽的知识海洋,不由理解了知识是学不完这句话.</p><p>在知识爆炸的今天,也许只有"现用现学"是解决这种情况的最好办法.</p><p>可是面对这些东西,开始觉得那句:"现用现学"是多么恐怖的一种境界.这种东西现学了能马上会用,用不是问题,问题是用这些新东西还能算出工程进度,还能编出可以维护的代码.如果再能保证代码的健壮性,那........</p><p>这里不由想到另一个问题:为什么现用现学还能用呢?如果是全新的东西,快速的学习肯定神仙也做不了.所以看起来全新的知识应该有相应的共通点.</p><p>是不是因为面向对象的思想呢?个人猜测,可能性比较大,因为一旦变成对象了,就可以不管他们的实现方式,一律归到已有的面向对象的思路中来,无非是多了几个新元素要记而已.要是这样,真应该感谢面向对象.</p><br /></li>
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/91708.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2007-01-04 11:03 <a href="http://www.blogjava.net/wangxinsh55/archive/2007/01/04/91708.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于W3C DOM </title><link>http://www.blogjava.net/wangxinsh55/archive/2006/12/31/91199.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Sun, 31 Dec 2006 08:59:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2006/12/31/91199.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/91199.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2006/12/31/91199.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/91199.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/91199.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: W3C   DOM																		文档对象模型														(DOM)												是与平台和语言无关的接口，允许程序和脚本动态地访问和更新文档的内容，结构和样式。文档可以进一步处理，处理的结果可以放回到所提供的页面中。																																 	...&nbsp;&nbsp;<a href='http://www.blogjava.net/wangxinsh55/archive/2006/12/31/91199.html'>阅读全文</a><img src ="http://www.blogjava.net/wangxinsh55/aggbug/91199.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2006-12-31 16:59 <a href="http://www.blogjava.net/wangxinsh55/archive/2006/12/31/91199.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> Ajax中使用JSON </title><link>http://www.blogjava.net/wangxinsh55/archive/2006/12/31/91198.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Sun, 31 Dec 2006 08:52:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2006/12/31/91198.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/91198.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2006/12/31/91198.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/91198.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/91198.html</trackback:ping><description><![CDATA[提交数据使用json代替xml
<p>    页面：jsonExample.jsp</p><p>&lt;%@ page contentType="text/html; charset=GBK" %&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;<br />JSON示例<br />&lt;/title&gt;<br />&lt;script type="text/javascript" src="zxml.src.js"&gt;&lt;/script&gt;<br />&lt;script type="text/javascript" src="json.js"&gt;&lt;/script&gt;<br />&lt;script type="text/javascript"&gt;<br /> var xmlHttp;<br />        <br />        //创建对象<br />        function createXMLHttpRequest(){<br />         xmlHttp = zXmlHttp.createRequest();<br />        }<br />        <br />        function doJSON(){<br />           //得到Car对象<br />         var car = getCarObject();<br />                <br />                //用JSON字符串化car对象<br />                var carAsJSON = car.toJSONString();<br />                alert("汽车对象JSON化为:\n" + carAsJSON);<br />                <br />                var url = "JSONExample?timeStamp=" + new Date().getTime();<br />                <br />                //创建对象<br />                createXMLHttpRequest();<br />                xmlHttp.open("POST",url,true);<br />                xmlHttp.onreadystatechange = handleStateChange;<br />                xmlHttp.setRequestHeader("Content-Type","application/x-www-form.urlencoded");<br />                xmlHttp.send(carAsJSON);<br />        }<br />        <br />        //回调方法<br />        function handleStateChange(){<br />         if (xmlHttp.readyState == 4){<br />                 if (xmlHttp.status == 200){<br />                         parseResults();<br />                        }<br />                }<br />        }<br />        <br />        //解析结果<br />        function parseResults(){<br />         var responseDiv = document.getElementById("serverResponse");<br />                if (responseDiv.hasChildNodes()){<br />                 responseDiv.removeChild(responseDiv.childNode[0]);<br />                }<br />                <br />                var responseText = document.createTextNode(xmlHttp.responseText);<br />                responseDiv.appendChild(responseText);<br />        }<br />        <br />        //得到Car对象<br />        function getCarObject(){<br />         return new Car("Dodge","Coronet R/T",1968,"yellow");<br />        }<br />        <br />        <br />        //Car构造函数<br />        function Car(make,model,year,color){<br />         this.make = make;<br />                this.model = model;<br />                this.year = year;<br />                this.color = color;<br />        }<br />&lt;/script&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;br /&gt;&lt;br /&gt;<br />&lt;form action="#"&gt;<br />  &lt;input type="button" value="发送JSON数据" onclick="doJSON();"/&gt;<br />&lt;/form&gt;<br />&lt;h2&gt;<br />  服务器响应：<br />&lt;/h2&gt;<br />&lt;div id="serverResponse"&gt;<br />&lt;/div&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br /></p><p>    服务器：JSONExample.java</p><p>package ajaxbook.chap4;</p><p>import java.io.*;<br />import java.net.*;<br />import java.text.ParseException;<br />import javax.servlet.*;<br />import javax.servlet.http.*;<br />import org.json.JSONObject;</p><p>public class JSONExample<br />    extends HttpServlet {<br />  //处理Post方法<br />  protected void doPost(HttpServletRequest request,<br />                        HttpServletResponse response) throws ServletException,<br />      IOException {<br />    String json = readJSONStringFromRequestBody(request);</p><p>    //使用JSON绑字Ajax对象<br />    JSONObject jsonObject = null;<br />    try {<br />      jsonObject = new JSONObject(json);<br />    }<br />    catch (ParseException pe) {<br />      System.out.println("ParseException: " + pe.toString());<br />    }</p><p>    //返回输出结果<br />    String responseText = "You have a " + jsonObject.getInt("year") + " "<br />        + jsonObject.getString("make") + " " + jsonObject.getString("model")<br />        + " " + " that is " + jsonObject.getString("color") + " in color.";</p><p>    response.setContentType("text/xml");<br />    response.getWriter().print(responseText);<br />  }</p><p>  //得到参数<br />  private String readJSONStringFromRequestBody(HttpServletRequest request) {<br />    StringBuffer json = new StringBuffer();<br />    String line = null;<br />    try {<br />      BufferedReader reader = request.getReader();<br />      while ( (line = reader.readLine()) != null) {<br />        json.append(line);<br />      }<br />    }<br />    catch (Exception e) {<br />      System.out.println("Error reading JSON string: " + e.toString());<br />    }<br />    return json.toString();<br />  }<br />}</p><p> </p><p>注意：要引入json.js和json的源文件，使用json.jar不行，源文件参见书籍源代码第三章</p><p>参考：Ajax基础教程  作笔记吧 </p><br /><br /><p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=975204</p><img src ="http://www.blogjava.net/wangxinsh55/aggbug/91198.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2006-12-31 16:52 <a href="http://www.blogjava.net/wangxinsh55/archive/2006/12/31/91198.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AJAX+jsp无刷新验证码实例</title><link>http://www.blogjava.net/wangxinsh55/archive/2006/12/11/86907.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Mon, 11 Dec 2006 06:55:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2006/12/11/86907.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/86907.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2006/12/11/86907.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/86907.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/86907.html</trackback:ping><description><![CDATA[
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td class="shortmsg_td">
										<font color="#006600">【导读】本文通过实例，介绍在做验证码的时候为了给用户很好的体验，需要在原有验证方式基础之上增加一段js，通过xmlhttp来获取返回值，以此来验证是否有效。同时，本例还特别适合检验用户名是否有效。</font>
								</td>
						</tr>
				</tbody>
		</table>
		<div class="test_6">
				<!-- 画中画广告开始 -->
				<div class="floatright">
						<span id="hzhok">
						</span>
				</div>
				<!-- 画中画广告结束 -->
				<span class="top11">
						<p>
						</p>
						<p>1、我们在做验证码的时候往往由于要反作弊，验证有时故意加入多的干扰因素，这时验证码显示不很清楚，用户经常输入错误。这样不但要重新刷新页面，导致用户没有看清楚验证码而重填而不是修改，而且如果没有用session保存下用户输入的其它数据的话(如姓名)，用户刚刚输入的内容也不存在了，这样给用户造成不好的体验。 </p>
						<p>2、本例在原有验证方式基础之上增加一段js，通过xmlhttp来获取返回值，以此来验证是否有效，这样即使用户浏览器不支持js，也不会影响他的正常使用了。 </p>
						<p>3、为了防止作弊，当用户连接3次输入错误时则重载一下图片，这样也利于用户因为图片上的验证码辨认不清而使其终无法输入正确。 </p>
						<p>4、本例还特别适合检验用户名是否有效，只要从后台做个sql查询，返回一个值或是xml即可。(这种例子太多 ，就在此不赘述了)。 </p>
						<p>5、本例的优点在于非常方便用户输入，而且减少对服务器端的请求，可以说既改善用户体验而且略会节省带宽成本，但相应地要在页面上增加一段JavaScript代码，在目前网速越来越快人们要求便捷舒适的今天，似乎我们更应注意提供给用户良好的使用感受。 </p>
						<p>代码如下：</p>
						<p>
								<strong>1、img.jsp,输入主页面</strong>
						</p>
						<p>
						</p>
						<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
								<tbody>
										<tr>
												<td class="code" bgcolor="#e6e6e6">
														<pre>
																<p>&lt;%@ page contentType="text/html; charset=GBK" language="java" </p>
																<p>import="java.sql.*" errorPage="" pageEncoding="GBK"%&gt;<br /><br />&lt;%<br /><br />//set Chinese Char <br /><br />//Cody by <a href="mailto:JarryLi@gmail.com">JarryLi@gmail.com</a>;<br /><br />//homepage:jiarry.126.com<br /><br />request.setCharacterEncoding("GBK");<br /><br />response.setCharacterEncoding("GBK");<br /><br />response.setContentType("text/html; charset=GBK");<br /><br />%&gt;<br /><br />&lt;html&gt;<br /><br />&lt;head&gt;<br /><br />&lt;title&gt;图片验证&lt;/title&gt;<br /><br />&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;<br /><br />&lt;script src="net.js"&gt;&lt;/script&gt;<br /><br />&lt;/head&gt;</p>
																<p>&lt;body&gt;<br /><br />AJAX(无刷新及时提示)验证码实例！cody by jarry<br /><br />&lt;hr&gt;<br /><br />&lt;%<br /><br />String num=request.getParameter("num");<br /><br />String random=(String)session.getAttribute("random");<br /><br />String name=request.getParameter("name");<br /><br />if(num!=null&amp;&amp;random!=null&amp;&amp;name!=null)<br /><br />{<br /><br />if(num.equals(random))<br /><br />{  <br /><br />out.println("&lt;font style=\"color:green;font-weight:bold\"&gt;</p>
																<p>恭喜您，验证码输入成功，这里是提交结果页面，可以写入数据库了！&lt;/font&gt; </p>
																<p>&lt;a href=\"img.jsp\"&gt;返回再测试&lt;/a&gt;&lt;br&gt;");<br /><br />out.println("您的名字是："+name);<br /><br />out.println("&lt;br&gt;");<br /><br />out.println("您输入的是："+num);<br /><br />out.println("验证码是："+random);<br /><br />out.println("&lt;/body&gt;");<br /><br />return;//javascript:history.go(-1)<br /><br />}<br /><br />}<br /><br />%&gt;<br /><br />&lt;script type="text/javascript"&gt;<br /><br />var times=0;<br /><br />function subform(){<br /><br />var gtext=this.req.responseText;<br /><br />var info=document.getElementById("info");<br /><br />if(gtext.indexOf("validate_successful")!=-1){<br /><br />//info.innerHTML="&lt;font color=green&gt;验证码通过&lt;/font&gt;";<br /><br />document.forms["myform"].submit();<br /><br />//当得到的值表示合法，则验证码通过。<br /><br />}else{<br /><br />times++;<br /><br />if(times&gt;=3){//如果连接3次输入错误，则重载图片，可以防止作弊和用户看不清图片;<br /><br />info.innerHTML="接连3次输入错误。更新验证码，请重新输入";<br /><br />document.forms["myform"].num.value="";<br /><br />show(document.getElementById('random'));<br /><br />times=0;<br /><br />}else{<br /><br />info.innerHTML="第"+times+"次验证码错误,请注意区分大小写 ";<br /><br />}<br /><br />document.forms["myform"].num.select();<br /><br />}</p>
																<p>}<br /><br />function validata(obj){<br /><br />var enter=true;<br /><br />var info=document.getElementById("info");<br /><br />var msg="";<br /><br />if(obj.name.value.match(/^\s*$/g)){//如果未输入名字，提示<br /><br />msg+="请输入您的姓名&lt;br&gt;";enter=false<br /><br />}<br /><br />if(obj.num.value.match(/^\s*$/g)){//如果未输入验证码，提示<br /><br />msg+="请输入验证码&lt;br&gt;";enter=false  <br /><br />}<br /><br />if(enter==false){<br /><br />info.innerHTML=msg;<br /><br />return false;<br /><br />}<br /><br />var url="num.jsp?num="+obj.num.value;<br /><br />var newxmlhttp=new net.ContentLoader(url,subform,"","get",null,null); <br /><br />return false;<br /><br />}<br /><br />function show(o){<br /><br />//重载验证码<br /><br />var timenow = new Date().getTime();<br /><br />o.src="random.jsp?d="+timenow;<br /><br />/*<br /><br />//超时执行;<br /><br />setTimeout(function(){<br /><br />o.src="random.jsp?d="+timenow;<br /><br />}<br /><br />,20);<br /><br />*/<br /><br />}<br /><br />&lt;/script&gt;<br /><br />&lt;form action="img.jsp" name="myform" method="post"</p>
																<p>onsubmit="return validata(this);"&gt;<br /><br />您的姓名：&lt;input type="text" name="name" size=10&gt; (为了更好地说明此例，特加姓名一项)&lt;br&gt;<br /><br />验 证 码：&lt;input type="text" name="num" size=10 maxlength="4"&gt; </p>
																<p>&lt;img src="random.jsp" id="random" align="" valign="absmiddle" hspace="5"&gt; </p>
																<p>&lt;a href="javascript:show(document.getElementById('random'))"&gt;验证码看不清&lt;/a&gt;&lt;br&gt;<br /><br />&lt;br&gt; &lt;input type="submit" value=" 提交 "&gt;&lt;br&gt;<br /><br />&lt;div id=info style="color:red;padding:10px;font-size:12px;"&gt;&lt;/div&gt;<br /><br />&lt;/form&gt;<br /><br />&lt;/body&gt;<br /><br />&lt;/html&gt;</p>
														</pre>
												</td>
										</tr>
								</tbody>
						</table>
						<p>
								<strong>2、num.jsp,反馈xmlhttp请求的页面</strong>
						</p>
						<p>
						</p>
						<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
								<tbody>
										<tr>
												<td class="code" bgcolor="#e6e6e6">
														<pre>
																<p>&lt;%@ page contentType="text/html; charset=GBK" language="java" </p>
																<p>import="java.sql.*" errorPage="" pageEncoding="GBK"%&gt;<br /><br />&lt;%<br /><br />//set Chinese Char <br /><br />//Cody by <a href="mailto:JarryLi@gmail.com">JarryLi@gmail.com</a>;<br /><br />//homepage:jiarry.126.com<br /><br />request.setCharacterEncoding("GBK");<br /><br />response.setCharacterEncoding("GBK");<br /><br />response.setContentType("text/html; charset=GBK");<br /><br />%&gt;<br /><br />&lt;%<br /><br />String num=request.getParameter("num");<br /><br />String random=(String)session.getAttribute("random");</p>
																<p>if(num!=null&amp;&amp;random!=null)<br /><br />{<br /><br />if(!num.equals(random))<br /><br />{<br /><br />/*<br /><br />out.println("&lt;script&gt;alert('验证码错误！请重试。')&lt;/script&gt;");<br /><br />out.println("&lt;script&gt;history.go(-1)&lt;/script&gt;");<br /><br />//response.sendRedirect("img.jsp");<br /><br />*/<br /><br />out.print("validate_failed:"+random);<br /><br />}<br /><br />else<br /><br />{<br /><br />//out.println("&lt;center&gt;验证成功！&lt;/center&gt;");<br /><br />out.print("validate_successful:"+random);<br /><br />}<br /><br />}<br /><br />%&gt;</p>
														</pre>
												</td>
										</tr>
								</tbody>
						</table>
						<p>
								<strong>3、random.jsp,生成验证码图片的页面</strong>
						</p>
						<p>
						</p>
						<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
								<tbody>
										<tr>
												<td class="code" bgcolor="#e6e6e6">
														<pre>
																<p><![CDATA[<%@ page autoFlush="false"&nbsp; import="java.util.*,java.awt.*,java.awt.image.*,</p><p>com.sun.image.codec.jpeg.*,java.util.*" %>]]&gt;</p>
																<p>&lt;%@ page autoFlush="false"  import="java.util.*,java.awt.*,</p>
																<p>java.awt.image.*,com.sun.image.codec.jpeg.*,java.util.*" %&gt;</p>
																<p>&lt;%<br /><br />//set Chinese Char <br /><br />//Cody by <a href="mailto:JarryLi@gmail.com">JarryLi@gmail.com</a>;<br /><br />//homepage:jiarry.126.com<br /><br />request.setCharacterEncoding("GBK");<br /><br />response.setCharacterEncoding("GBK");<br /><br />response.setContentType("text/html; charset=GBK");<br /><br />%&gt;<br /><br />&lt;%<br /><br />String chose="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";</p>
																<p>char display[]={'0',' ','0',' ','0',' ','0'},ran[]={'0','0','0','0'},temp;</p>
																<p>Random rand=new Random();</p>
																<p>for(int i=0;i&lt;4;i++)<br /><br />{</p>
																<p>temp=chose.charAt(rand.nextInt(chose.length()));</p>
																<p>display[i*2]=temp;</p>
																<p>ran[i]=temp;<br /><br />}<br /><br /><br /><br />String random=String.valueOf(display);</p>
																<p>session.setAttribute("random",String.valueOf(ran));<br /><br />%&gt;<br /><br />&lt;%</p>
																<p>out.clear();<br /><br />response.setContentType("image/jpeg");<br /><br />response.addHeader("pragma","NO-cache");<br /><br />response.addHeader("Cache-Control","no-cache");<br /><br />response.addDateHeader("Expries",0);<br /><br />int width=80, height=30;<br /><br />BufferedImage image = new BufferedImage(width, height, </p>
																<p>BufferedImage.TYPE_INT_RGB);<br /><br />Graphics g = image.getGraphics();<br /><br />//以下填充背景颜色<br /><br />g.setColor(Color.GREEN);<br /><br />g.fillRect(0, 0, width, height);<br /><br />//设置字体颜色<br /><br />g.setColor(Color.RED);<br /><br />Font font=new Font("Arial",Font.PLAIN,20);<br /><br />g.setFont(font);<br /><br />//g.drawString(random,5,14);<br /><br />g.drawString(random,5,20);<br /><br />g.dispose();<br /><br />ServletOutputStream outStream = response.getOutputStream();<br /><br />JPEGImageEncoder encoder =JPEGCodec.createJPEGEncoder(outStream);<br /><br />encoder.encode(image);<br /><br />outStream.close();<br /><br />%&gt;</p>
														</pre>
												</td>
										</tr>
								</tbody>
						</table>
						<br />
						<br />
						<strong>4、net.js,封装好的xmlhttp对象，可以很方便的调用</strong>
						<p>
						</p>
						<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
								<tbody>
										<tr>
												<td class="code" bgcolor="#e6e6e6">
														<pre>
																<p>/* namespacing object */<br /><br />var net=new Object();<br /><br /><br /><br />net.READY_STATE_UNINITIALIZED=0;<br /><br />net.READY_STATE_LOADING=1;<br /><br />net.READY_STATE_LOADED=2;<br /><br />net.READY_STATE_INTERACTIVE=3;<br /><br />net.READY_STATE_COMPLETE=4;<br /><br />/*--- content loader object for cross-browser requests ---*/<br /><br />net.ContentLoader=function(url,on_load,on_error,method,params,contentType){<br /><br />this.req=null;<br /><br />this.on_load=on_load;<br /><br />this.on_error=(on_error) ? on_error : this.defaultError;<br /><br />this.loadXMLDoc(url,method,params,contentType);<br /><br />}<br /><br />net.ContentLoader.prototype.loadXMLDoc=function(url,method,params,contentType){<br /><br />if (!method)<br /><br />{<br /><br />method="GET";<br /><br />}<br /><br />if (!contentType &amp;&amp; method=="POST")<br /><br />{<br /><br />contentType='application/x-www-form-urlencoded';<br /><br />}<br /><br />if (window.XMLHttpRequest)<br /><br />{<br /><br />this.req=new XMLHttpRequest();<br /><br />}<br /><br />else if (window.ActiveXObject)<br /><br />{<br /><br />//add try catch;<br /><br />try {<br /><br />this.req = new ActiveXObject("Msxml2.XMLHTTP");<br /><br />}catch (e1){<br /><br />try {<br /><br />this.req = new ActiveXObject("Microsoft.XMLHTTP");     <br /><br />} catch (e2){<br /><br />}<br /><br />}<br /><br />//<br /><br />//this.req=new ActiveXObject("Microsoft.XMLHTTP");<br /><br />}<br /><br />if (this.req)<br /><br />{<br /><br />try<br /><br />{<br /><br />var loader=this;<br /><br />this.req.onreadystatechange=function()<br /><br />{<br /><br />net.ContentLoader.onReadyState.call(loader);<br /><br />}<br /><br />this.req.open(method,url,true);<br /><br />if (contentType)<br /><br />{<br /><br />this.req.setRequestHeader('Content-Type', contentType);<br /><br />}<br /><br />this.req.send(params);<br /><br />}<br /><br />catch (err)<br /><br />{<br /><br />this.on_error.call(this);<br /><br />}<br /><br />}<br /><br />}<br /><br />net.ContentLoader.onReadyState=function(){<br /><br />var req=this.req;<br /><br />var ready=req.readyState;<br /><br />if (ready==net.READY_STATE_COMPLETE){<br /><br />var httpStatus=req.status;<br /><br />if (httpStatus==200 || httpStatus==0){<br /><br />this.on_load.call(this);<br /><br />}else{<br /><br />this.on_error.call(this);<br /><br />}<br /><br />}<br /><br />}<br /><br />net.ContentLoader.prototype.defaultError=function(){<br /><br />alert("error fetching data!"<br /><br />+"\n\nreadyState:"+this.req.readyState<br /><br />+"\nstatus: "+this.req.status<br /><br />+"\nheaders: "+this.req.getAllResponseHeaders());<br /><br />}</p>
														</pre>
												</td>
										</tr>
								</tbody>
						</table>
						<p align="right">（责任编辑 火凤凰 <a href="mailto:sunsj@51cto.com">sunsj@51cto.com</a>  TEL：（010）68476636-8007）<br /><br /></p>
						<br />
						<br />
				</span>
		</div>
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/86907.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2006-12-11 14:55 <a href="http://www.blogjava.net/wangxinsh55/archive/2006/12/11/86907.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>prototype.js　1.4版开发者手册(强烈推荐) </title><link>http://www.blogjava.net/wangxinsh55/archive/2006/11/23/82984.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Thu, 23 Nov 2006 03:31:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2006/11/23/82984.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/82984.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2006/11/23/82984.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/82984.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/82984.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: http://wiki.script.aculo.us/scriptaculous/show/Prototype						这是一个很好的网站，很值得一看！！！！！！！！！！！！！！！！！！！！！看到一个很好的东西在国内没有被很多人使用起来，实在是不爽，所以花了很大功夫把这个手册翻译成中文，由于这篇文章很长，所以，翻译的工作量很大而且有些地方英文版也没有说清楚，虽得查看源代码，好在不是坚持做完...&nbsp;&nbsp;<a href='http://www.blogjava.net/wangxinsh55/archive/2006/11/23/82984.html'>阅读全文</a><img src ="http://www.blogjava.net/wangxinsh55/aggbug/82984.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2006-11-23 11:31 <a href="http://www.blogjava.net/wangxinsh55/archive/2006/11/23/82984.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts AjaxTags</title><link>http://www.blogjava.net/wangxinsh55/archive/2006/11/22/82757.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Wed, 22 Nov 2006 06:10:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2006/11/22/82757.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/82757.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2006/11/22/82757.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/82757.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/82757.html</trackback:ping><description><![CDATA[2005年<strong>Frank W. Zammetti</strong>扩展了Struts的Tag库，使Struts具备了AJAX功能。
<div>      （注：下面的代码引用自<strong>Frank W. Zammetti </strong>的ajaxtags包）</div><div> </div><div>      <strong>Tag库的扩展</strong></div><div>      1、FormTag</div><div>           增加了refAjax属性以及setter和getter方法；</div><div>      2、BaseHandlerTag</div><div>           增加了refAjax属性以及setter和getter方法；</div><div>           同时扩展了prepare×××Events方法，使其加载Ajax属性，如：</div><div>           <font color="#0000ff">if (getOnkeydown() != null) {<br />                  ......</font></div><div><font color="#0000ff">           }<br />           /* Frank W. Zammetti */<br />           else {<br />                  prepareAjax("onkeydown", handlers);<br />           }<br />           /* Frank W. Zammetti */</font></div><div>      3、Struts-Html.tld</div><div>           增加了refAjax属性；</div><div> </div><div>      <strong>应用</strong></div><div>      1、ajax-config.xml</div><div><font color="#0000ff">           ......</font></div><div><font color="#0000ff">           &lt;form ajaxRef="example1"&gt;<br />                &lt;element ajaxRef="button"&gt;<br />                      &lt;event type="onclick"&gt;</font></div><div><font color="#0000ff">                            //发送请求的设置<br />                            &lt;requestHandler type="std:QueryString"&gt;<br />                                 &lt;target&gt;example1.do&lt;/target&gt;<br />                                 &lt;parameter&gt;firstName=firstName,lastName=lastName&lt;/parameter&gt;<br />                            &lt;/requestHandler&gt;</font></div><div><font color="#0000ff">                            //回调函数（方法）及回写区域的设置<br />                            &lt;responseHandler type="std:InnerHTML"&gt;<br />                                 &lt;parameter&gt;example1_resultLayer&lt;/parameter&gt;<br />                            &lt;/responseHandler&gt;<br />                      &lt;/event&gt;<br />                &lt;/element&gt;<br />           &lt;/form&gt;</font></div><div><font color="#0000ff">           ......</font></div><div>      2、struts-config.xml</div><div>           <font color="#0000ff">......</font></div><div><font color="#0000ff">           //与其它Action的区别是：Ajax调用的Action没有input和forward</font></div><div><font color="#0000ff">           &lt;action path="/example1" name="example1Form" scope="request"</font></div><div><font color="#0000ff">                             type="com.omnytex.ajaxtags.Example1Action" /&gt;<br />           ......</font></div><div><font color="#0000ff">           //Ajax Tag Plugin</font></div><div><font color="#0000ff">           &lt;plug-in className="org.apache.struts.taglib.html.ajax.AjaxInit" /&gt;<br /></font><font color="#0000ff">           ......</font></div><div>      3、Jsp客户界面</div><div><font color="#0000ff">           ......</font></div><div><font color="#0000ff">           //对应于ajax-config.xml中的form ajaxRef</font></div><div><font color="#0000ff">           &lt;html:form action="example1" ajaxRef="example1"&gt;<br /></font></div><div><font color="#0000ff">                ......</font></div><div><font color="#0000ff">                //对应于ajax-config.xml中的Element ajaxRef</font></div><div><font color="#0000ff">                &lt;html:button property="button" value="Click to do Ajax!" ajaxRef="button" /&gt;<br />           &lt;/html:form&gt;<br />           Result:&lt;br&gt;</font></div><div><font color="#0000ff">           //对应于ajax-config.xml中的responseHandler<br />           &lt;span id="example1_resultLayer"&gt;&amp;nbsp;&lt;/span&gt;<br />           ......</font></div><div><font color="#0000ff">           //启用Ajax（应该放在Jsp的最后）</font></div><div><font color="#0000ff">           &lt;html:enableAjax /&gt;<br /></font></div><div><font color="#0000ff">           ......</font></div><div>      4、Action</div><div><font color="#0000ff">           ......</font></div><div><font color="#0000ff">           public ActionForward execute( ...... ) throws Exception {</font></div><div><font color="#0000ff">                try {</font></div><div><font color="#0000ff">                    ......</font></div><div><font color="#0000ff">                    //Ajax的Action需要输出内容到out</font></div><div><font color="#0000ff">                    PrintWriter out = response.getWriter();<br />                    out.println(......);<br />                    out.flush();<br />                    out.close();</font></div><div><font color="#0000ff">                } catch (Exception e) {<br />                    System.err.println("Exception in Example1Action.execute(): " + e);<br />                }</font></div><div><font color="#0000ff">                //由于Ajax的Action输出的内容由页面的区域接收，不需要跳转到其它页面</font></div><div><font color="#0000ff">                //所以，返回null</font></div><div><font color="#0000ff">                return null;</font></div><div><font color="#0000ff">           }</font></div><div><font color="#0000ff">           ......</font></div><div> </div><div>      <strong>Struts Ajax Tag工作原理</strong></div><div>      1、Struts启动，加载AjaxInit；</div><div>      2、AjaxInit解析ajax-config.xml；</div><div>      3、Struts加载AjaxEnabled的Jsp；</div><div>      4、Struts-AjaxTag根据Form ajaxRef和elment ajaxRef找到ajax-config的设置；</div><div>      5、输出AjaxEnabled的Html（Tag库加入了Ajax需要的Script，如：XMLHttpRequest）；</div><div>      6、用户输入数据，提交数据（异步模式提交后，用户可以继续其它操作）；</div><div>      7、XMLHttpRequest对象接管提交数据，并向Struts提交do及参数；</div><div>      8、Struts ActionServlet加载FormBean，和相应的Action；</div><div>      9、Struts Action执行相应逻辑，得到返回的数据，通过out输出；</div><div>      10、XMLHttpRequest得到Struts返回的数据；</div><div>      11、XMLHttpRequest调用设置的回调函数（方法），输出数据到指定的区域；</div><img src ="http://www.blogjava.net/wangxinsh55/aggbug/82757.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2006-11-22 14:10 <a href="http://www.blogjava.net/wangxinsh55/archive/2006/11/22/82757.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ajax跨域请求解决方法之Modello篇 </title><link>http://www.blogjava.net/wangxinsh55/archive/2006/10/26/77382.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Thu, 26 Oct 2006 05:05:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2006/10/26/77382.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/77382.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2006/10/26/77382.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/77382.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/77382.html</trackback:ping><description><![CDATA[
		<p>
				<a href="http://www.ajaxwing.com/index.php?id=2" target="_blank">Modello </a>是一个允许并且鼓励你用 JavaScript 来编写类的框架，而<a href="http://www.ajaxwing.com/index.php?id=4" target="_blank">Modello.ajax</a>则是利用此框架达到Ajax跨域请求的一个Ajax封装类。</p>
		<p>对于跨域调用，Modello.ajax 采用在本域服务器设置一个中转 proxy 的方式。使用 proxy 方式可以不用对个别浏览器进行特殊设置，不用依赖具体的服务器，并且具备扩展能力等优点。随 Modello.ajax 工具集提供的 proxy 用 php 写成，可运行 php 的服务器都可以安装。（以上内容转自<a href="http://www.ajaxwing.com/index.php?id=4" target="_blank">《Ajax Wing: 跨域Ajax工具: Modello.ajax》</a>）</p>
		<p>使用Modello的代码如下：</p>
		<p>&lt;script type="text/javascript" src="js/modello.js"&gt;&lt;/script&gt;<br />&lt;script type="text/javascript" src="js/modello.ajax.js"&gt;&lt;/script&gt;</p>
		<p>&lt;script&gt;<br />Define('URLGET_PROXY', 'jsproxy.php');<br />var urlget = Class.get('modello.ajax.Urllib').urlget;</p>
		<p>var url = "<a href="http://news.baidu.com/n?cmd=1&amp;class=internet&amp;tn=rss">http://news.baidu.com/n?cmd=1&amp;class=internet&amp;tn=rss</a>";<br />var response = urlget(url);<br />alert("跨域请求URL地址"+url);</p>
		<p>var myresult = response.getXML();</p>
		<p>alert("Ajax提取：“"+myresult.childNodes[1].childNodes[0].childNodes[0].text+"”成功");</p>
		<p>&lt;/script&gt;</p>
		<p>
				<a href="http://demo.open24.cn/modello_jsproxy" target="_blank">代码实例</a>
		</p>
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/77382.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2006-10-26 13:05 <a href="http://www.blogjava.net/wangxinsh55/archive/2006/10/26/77382.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于XML（XMLHTTP）跨域加载数据不会出现跨域的安全提示信息的问题</title><link>http://www.blogjava.net/wangxinsh55/archive/2006/03/30/38259.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Thu, 30 Mar 2006 07:02:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2006/03/30/38259.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/38259.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2006/03/30/38259.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/38259.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/38259.html</trackback:ping><description><![CDATA[ 网上看了很多资料，但好象很少人谈到跨域读取XML文档的问题，有些论坛或BLOG关于XML跨域读取的问题，实现起来非法复杂。 <br />在这里我介绍一下XMLHTTP跨域读取页面数据的问题，以JS为例 <br /><br />一、读取数据 <br /><br />//建立对象<br />var xml = new ActiveXObject("Microsoft.XMLHTTP")<br /><br />//这里的abc.xml是被读取的文件，当然也可以换成别的文件，false表示非异步传输，async是asynchronism简写 <br />xml.open("get","<img alt="::URL::" hspace="2" src="http://www.blogcn.com/images/aurl.gif" align="absBottom" border="0" /><a href="http://www.mydomain.com/abc.xml&quot;,false)" target="_blank">http://www.mydomain.com/abc.xml",false)</a>  <br />xml.send()<br /><br /><br />二、在被读取数据的域根下（上例是在www.mydomain.com/下），建立一个XML 策略文件，名字一定要是crossdomain.xml。<br /><br />在策略文件中加入以下代码<br />&lt;?xml version="1.0"?&gt;<br />&lt;cross-domain-policy&gt;<br />    &lt;allow-access-from domain="www.mydomain.com"/&gt; //domain属性的值就是被允许从本站读取数据的来源域名<br />&lt;/cross-domain-policy&gt;<br /><br /><br />这样就完成了跨域读取数据并不会出现跨域的安全提示信息了<br /><img src ="http://www.blogjava.net/wangxinsh55/aggbug/38259.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2006-03-30 15:02 <a href="http://www.blogjava.net/wangxinsh55/archive/2006/03/30/38259.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>