﻿<?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-天马行空</title><link>http://www.blogjava.net/fenris/</link><description>There Can Be Miracles WHEN YOU BELIEVE</description><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 06:01:46 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 06:01:46 GMT</pubDate><ttl>60</ttl><item><title>SAFARI CSS HACK REDUX</title><link>http://www.blogjava.net/fenris/archive/2008/02/19/180755.html</link><dc:creator>Fenris</dc:creator><author>Fenris</author><pubDate>Tue, 19 Feb 2008 14:43:00 GMT</pubDate><guid>http://www.blogjava.net/fenris/archive/2008/02/19/180755.html</guid><wfw:comment>http://www.blogjava.net/fenris/comments/180755.html</wfw:comment><comments>http://www.blogjava.net/fenris/archive/2008/02/19/180755.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fenris/comments/commentRss/180755.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fenris/services/trackbacks/180755.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="word-spacing: 0px; font: 17px Verdana; text-transform: none; color: rgb(50,50,50); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0">
<p style="padding-right: 0px; padding-left: 0px; font-size: 1.1em; padding-bottom: 1em; margin: 0px; line-height: 1.5em; padding-top: 1em; font-style: normal">转一个关于safari的css hack。<br />
文章来自<span class="Apple-style-span" style="word-spacing: 0px; font: 12px 'Lucida Grande'; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: pre; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0">http://themechanism.com/blog/2008/01/08/safari-css-hack-redux/</span><br />
In March 2007, I wrote about a<span class="Apple-converted-space">&nbsp;</span><a style="color: rgb(43,136,170); text-decoration: none" href="http://themechanism.com/blog/2007/03/28/safari-css-hack/">Safari<span class="Apple-converted-space">&nbsp;</span><abbr title="Cascading Style Sheets" style="border-top-style: none; border-right-style: none; border-left-style: none; border-bottom-style: none">CSS</abbr><span class="Apple-converted-space">&nbsp;</span>hack</a>called the "Pound Safari Post Semicolon" hack (coined by Tony at<span class="Apple-converted-space">&nbsp;</span><a style="padding-right: 13px; background-position: 100% 100%; background-image: url(http://themechanism.com/images/lib/icon_external.gif); color: rgb(43,136,170); margin-right: 1px; background-repeat: no-repeat; text-decoration: none" href="http://www.simiandesign.com/blog-fu/2005/11/safari_css_hack.php" rel="external">Simian Design</a>). As of Safari 3.0, this hack no longer works. However, there<span class="Apple-converted-space">&nbsp;</span><em>is</em><span class="Apple-converted-space">&nbsp;</span>a way to target Safari 3.0 (and Opera as well):</p>
<blockquote style="padding-right: 3em; padding-left: 3em; font-size: 0.9em; padding-bottom: 0.75em; margin: 0px; line-height: 1.6em; padding-top: 0.75em; font-style: normal">
<p style="padding-right: 0px; padding-left: 0px; font-size: 1.1em; padding-bottom: 1em; margin: 0px; line-height: 1.5em; padding-top: 1em; font-style: normal">@media screen and (-webkit-min-device-pixel-ratio:0) {<br />
/* Safari 3.0 and Opera 9 rules here */<br />
}</p>
</blockquote>
<p style="padding-right: 0px; padding-left: 0px; font-size: 1.1em; padding-bottom: 1em; margin: 0px; line-height: 1.5em; padding-top: 1em; font-style: normal">As always, the disclaimer(免责声明): nobody condones the use of hacks, but we all (well, most of us) have to make use of them at least once in a while. The above code targets both Safari 3.0 and Opera 9. Hopefully, it will be a future-proof（未来保证） hack, since the -webkit part of the selector will probably not be adopted by other browsers.</p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 1.1em; padding-bottom: 1em; margin: 0px; line-height: 1.5em; padding-top: 1em; font-style: normal">Example: The following code set the background color of the &lt;body&gt; element red in all browsers and then resets it to blue in Safari 3.0 and Opera 9.<br />
<code style="font-size: 0.9em; font-family: Courier, 'MS Courier New', Prestige, monospace">body { background-color: red; }<br />
@media screen and (-webkit-min-device-pixel-ratio:0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;body { background-color: blue; }<br />
}</code><br />
[<a style="color: rgb(43,136,170); text-decoration: none" href="http://themechanism.com/demo/safari-css-hack.htm">demo</a>]</p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 1.1em; padding-bottom: 1em; margin: 0px; line-height: 1.5em; padding-top: 1em; font-style: normal"><em>Tested on Mac OS X version 10.5.1 with Safari version 3.0.4 (5523.10.6) and Mozilla Firefox version 2.0.0.11. Tested on Windows XP Professional Version 2002 SP 2 with Mozilla Firefox version 2.0.0.11, Opera 9.10, and Microsoft Internet Explorer 6. Hack from<span class="Apple-converted-space">&nbsp;</span><a style="padding-right: 13px; background-position: 100% 100%; background-image: url(http://themechanism.com/images/lib/icon_external.gif); color: rgb(43,136,170); margin-right: 1px; background-repeat: no-repeat; text-decoration: none" href="http://www.evotech.net/blog/2007/06/targeting-safari-30-with-css/" rel="external">CSS, JavaScript and XHTML Explained</a>.</em></p>
</span>
<img src ="http://www.blogjava.net/fenris/aggbug/180755.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fenris/" target="_blank">Fenris</a> 2008-02-19 22:43 <a href="http://www.blogjava.net/fenris/archive/2008/02/19/180755.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一次性为所有元素添加自定义的tooltip</title><link>http://www.blogjava.net/fenris/archive/2007/12/03/164741.html</link><dc:creator>Fenris</dc:creator><author>Fenris</author><pubDate>Sun, 02 Dec 2007 18:00:00 GMT</pubDate><guid>http://www.blogjava.net/fenris/archive/2007/12/03/164741.html</guid><wfw:comment>http://www.blogjava.net/fenris/comments/164741.html</wfw:comment><comments>http://www.blogjava.net/fenris/archive/2007/12/03/164741.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fenris/comments/commentRss/164741.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fenris/services/trackbacks/164741.html</trackback:ping><description><![CDATA[<div>在网上看到了这样的效果：当鼠标移到某一个超链接上的时候，弹出一个自定义的提示。比ie自带的那个好看得多。</div>
<div>&nbsp;</div>
<div>不难实现，所以来试一试：</div>
<div>&nbsp;</div>
<div>1.准备一个测试页面。页面上只有三个超级链接，为每个连接设置好title属性。</div>
<div>&nbsp;</div>
<div><font class="lightFont"><span style="color: #0000ff"><font class="lightFont">&lt;a href="#" title="1)LOOP&#8230;EXIT&#8230;END循环控制语句"&gt;1)LOOP&#8230;EXIT&#8230;END循环控制语句&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;</font><br />
<font class="lightFont">&lt;a href="#" title="2)WHILE&#8230;LOOP循环控制语句"&gt;2)WHILE&#8230;LOOP循环控制语句&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;</font><br />
<font class="lightFont">&lt;a href="#" title="3)FOR&#8230;LOOP循环控制语句"&gt;3)FOR&#8230;LOOP循环控制语句&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;</font></span></font></div>
<div><font color="#3300ff"></font>&nbsp;</div>
<div><font color="#000000">2.一般情况我们会想到，为每一个&lt;a&gt;标记写上onmouseover和onmouseout事件来控制tooltip的显示与隐藏。</font></div>
<div>那么，有没有一种方便的方法来做这件事情呢？</div>
<div>我们知道，从dom的角度来看网页的话，所有的元素都是document下的子节点，所以我们可以通过循环的方式来为元素添加事件：</div>
<div>&nbsp;</div>
<div><font class="lightFont"><span style="color: #0000ff"><font class="lightFont">&nbsp;var allEles = document.all;</font><br />
<font class="lightFont">&nbsp;</font><br />
<font class="lightFont">&nbsp;for(var i =0;i&lt;allEles.length;i++){</font><br />
<font class="lightFont">&nbsp;&nbsp;&nbsp;allEles[i].onmouseover = function(){show(this.title)};//设置onmouseover，使我们自定义的tooltip显示</font><br />
<font class="lightFont">&nbsp;&nbsp;&nbsp;allEles[i].onmouseout = function(){hide()};设置onmouseout，使我们自定义的tooltip隐藏</font><br />
<font class="lightFont">&nbsp;}</font></span></font></div>
<div><font color="#3300ff"></font>&nbsp;</div>
<div><font color="#000000">这是最初写的代码，运行后发现了问题，因为document.all不仅会把页面上的三个&lt;a&gt;标记取出来还会把&lt;br&gt;等标记一起取出。所以要在设置事件前加上判断：</font></div>
<div>if(allEles[i].title!=""&amp;&amp;allEles[i].title!=undefined){}</div>
<div>&nbsp;</div>
<div>3.加上事件后，我们就可以开始处理tooltip的显示了。</div>
<div>首先声明一个css类</div>
<div><span style="color: #0000ff">.qTip{<br />
&nbsp;padding: 3px;边距=3<br />
&nbsp;border: 1px solid gray;边框：1像素宽的灰色单线边框<br />
&nbsp;border-right-width: 2px;<br />
&nbsp;border-bottom-width: 2px;右边和下边的边框宽度设为2<br />
&nbsp;color: #349045;字色为某种绿<br />
&nbsp;background-color:#ffffff;背景为白色，可以试试不写着一行，会产生很奇特的效果。<br />
&nbsp;font-size:12px;字体12像素<br />
&nbsp;position: absolute;定位=绝对定位<br />
&nbsp;z-index: 1000;<br />
}</span></div>
<div>&nbsp;</div>
<div>接下来的思路是：当鼠标移上连接时，动态产生一个层，并把链接的title属性的值赋给层。让层在鼠标移动到的地方显示。</div>
<div>&nbsp;</div>
<div><span style="color: #0000ff">function show(e){<br />
&nbsp;tipContainer = document.createElement("div");<br />
&nbsp;tipContainer.className = "qTip";<br />
&nbsp;tipContainer.innerText = e;<br />
&nbsp;tipContainer.style.top = event.offsetY + 15;不能直接让鼠标出现在层上，所以要设置一定量的偏移。<br />
&nbsp;tipContainer.style.left = event.offsetX + 15;<br />
&nbsp;document.getElementsByTagName("body").item(0).appendChild(tipContainer);<br />
};</span></div>
<div>&nbsp;</div>
<div>同样，隐藏层：</div>
<div>把tipContainer从文档流中删除。</div>
<div><span style="color: #0000ff">function hide(){<br />
&nbsp;if(tipContainer!=null){<br />
&nbsp;&nbsp;document.getElementsByTagName("body").item(0).removeChild(tipContainer);<br />
&nbsp;}&nbsp;<br />
};</span></div>
<div>&nbsp;</div>
<div>演示地址：<a href="http://daixiaoxiao.googlepages.com/CustomToolTip.html">http://daixiaoxiao.googlepages.com/CustomToolTip.html</a></div>
<div>&nbsp;</div>
<div><a href="http://daixiaoxiao.googlepages.com/Untitled-1.html"></a>&nbsp;</div>
 <img src ="http://www.blogjava.net/fenris/aggbug/164741.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fenris/" target="_blank">Fenris</a> 2007-12-03 02:00 <a href="http://www.blogjava.net/fenris/archive/2007/12/03/164741.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我的第一个Ajax例程</title><link>http://www.blogjava.net/fenris/archive/2007/12/02/164584.html</link><dc:creator>Fenris</dc:creator><author>Fenris</author><pubDate>Sat, 01 Dec 2007 18:49:00 GMT</pubDate><guid>http://www.blogjava.net/fenris/archive/2007/12/02/164584.html</guid><wfw:comment>http://www.blogjava.net/fenris/comments/164584.html</wfw:comment><comments>http://www.blogjava.net/fenris/archive/2007/12/02/164584.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fenris/comments/commentRss/164584.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fenris/services/trackbacks/164584.html</trackback:ping><description><![CDATA[<font style="line-height: 1.3em" face="Times"><font style="font-size: small; line-height: 1.3em">一、Ajax</font><wbr>并不是像<font style="line-height: 1.3em" face="Times">Java</font><wbr>或<font style="line-height: 1.3em" face="Times">Dot Net</font><wbr>一样是一项具体的新的技术，它是以下几种技术的综合应用：</font><wbr> <br />
<font style="line-height: 1.3em" face="Times"><font style="font-size: small; line-height: 1.3em">1.</font><wbr>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font style="font-size: small; line-height: 1.3em">JavaScript:</font><wbr></font><wbr><font style="font-size: small; line-height: 1.3em">我们一期学的那些<font style="line-height: 1.3em" face="Times">JavaScript</font><wbr>还不足以应付<font style="line-height: 1.3em" face="Times">Ajax</font><wbr>的应用。所以应该多找一些<font style="line-height: 1.3em" face="Times">JavaScript</font><wbr>的高级教程来看看。</font><wbr> <br />
<font style="line-height: 1.3em" face="Times"><font style="font-size: small; line-height: 1.3em">2.</font><wbr>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font style="font-size: small; line-height: 1.3em">Dom</font><wbr></font><wbr><font style="font-size: small; line-height: 1.3em">：二年学的如果理解得好的话，够用了</font><wbr> <br />
<font style="line-height: 1.3em" face="Times"><font style="font-size: small; line-height: 1.3em">3.</font><wbr>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font style="font-size: small; line-height: 1.3em">Css</font><wbr></font><wbr><font style="font-size: small; line-height: 1.3em">：如果向界面好看滴话，这个相当重要！</font><wbr> <br />
<font style="line-height: 1.3em" face="Times"><font style="font-size: small; line-height: 1.3em">4.</font><wbr>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font style="font-size: small; line-height: 1.3em">XMLHttpRequest</font><wbr></font><wbr><font style="font-size: small; line-height: 1.3em">对象：相当于一个新的类。熟悉<font style="line-height: 1.3em" face="Times">api</font><wbr>的话很简单的。</font><wbr> <br />
<font style="line-height: 1.3em" face="Times"><font style="font-size: small; line-height: 1.3em">5.</font><wbr>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font style="font-size: small; line-height: 1.3em">XML</font><wbr></font><wbr><font style="font-size: small; line-height: 1.3em">：和王老师讲的一样，既可以做数据存储，又可以做数据传输用。（我一般都是用作数据传输）</font><wbr> <br />
<br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">二、</font><wbr>应用<font style="line-height: 1.3em" face="Times">Ajax</font><wbr>程序的执行流程</font><wbr> <br />
<font style="font-size: small; line-height: 1.3em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通常的情况：在我们编写基于<font style="line-height: 1.3em" face="Times">MVC</font><wbr>模式的程序时，过程往往是：客户端输入信息，提交一个表单到控制器，控制器执行相应的操作，把结果写到响应里，返回给客户端。</font><wbr> <br />
<font style="font-size: small; line-height: 1.3em">在完成这一整套流程之前，用户是不能进行其他操作的。用户必须等待服务器正确地返回了响应之后，才能进行别的操作。</font><wbr> <br />
<font style="font-size: small; line-height: 1.3em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;而使用<font style="line-height: 1.3em" face="Times">Ajax</font><wbr>设计的情况是：客户端输入信息，在后台通过<font style="line-height: 1.3em" face="Times">javascript</font><wbr>异步的把请求提交到控制器。在控制器处理这个请求时，客户端依然可以执行其他的操作。并不需要等待上一次的请求得到响应。</font><wbr> <br />
<font style="font-size: small; line-height: 1.3em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;那么为什么可以异步的提交请求呢？这就是<font style="line-height: 1.3em" face="Times">XMLHttpRequest</font><wbr>这个对象所提供的功能。<font style="line-height: 1.3em" face="Times">Ajax</font><wbr>的核心对象。（<font style="line-height: 1.3em" face="Times">XHR</font><wbr>对象早在<font style="line-height: 1.3em" face="Times">1999</font><wbr>年就随着<font style="line-height: 1.3em" face="Times">IE</font><wbr>出现了，从这一点就可以看出，<font style="line-height: 1.3em" face="Times">Ajax</font><wbr>不是什么了不起的东西）。下面我们来看看这个神奇的东东。</font><wbr> <br />
<br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">三、XMLHttpRequest</font><wbr><span style="color: red">！！！</span></font><wbr> <br />
<font style="font-size: small; line-height: 1.3em">这三个感叹号不是随便打的，用红色显示也不是一时兴起。原因只有一个：<font style="line-height: 1.3em" face="Times">XMLHttpRequest</font><wbr>（简写成：<font style="line-height: 1.3em" face="Times">XHR</font><wbr>）是整个<font style="line-height: 1.3em" face="Times">Ajax</font><wbr>技术的最核心的一个对象。客户端与服务器的交互都是通过这个对象来进行的。不过不要因此觉得他很难。他和我们学过的千千万万个类一样。我们只要熟悉他的<font style="line-height: 1.3em" face="Times">API</font><wbr>，就可以灵活的运用它了。</font><wbr> <br />
<br />
<font style="font-size: small; line-height: 1.3em">众所周知，类是由属性和方法组成的。下边就是<font style="line-height: 1.3em" face="Times">XHR</font><wbr>的属性：</font><wbr> <br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">readystate:</font><wbr>请求的状态</font><wbr> <br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">0</font><wbr>：未初始化</font><wbr> <br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">1</font><wbr>：正在加载</font><wbr> <br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">2</font><wbr>：加载完成</font><wbr> <br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">3</font><wbr>：正在交互（发送请求成功，正在接收响应数据）</font><wbr> <br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">4</font><wbr>：结束（数据已经成功接收）</font><wbr> <br />
<br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">status</font><wbr>：<font style="line-height: 1.3em" face="Times">Http</font><wbr>状态码</font><wbr> <br />
<br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">statusText</font><wbr>：<font style="line-height: 1.3em" face="Times">Http</font><wbr>状态码所对应的文字</font><wbr> <br />
<font style="font-size: small; line-height: 1.3em">常见的状态码和文字：</font><wbr> <br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">200</font><wbr>：成功</font><wbr> <br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">202</font><wbr>：接受成功，但处理未完成</font><wbr> <br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">400</font><wbr>：错误的请求</font><wbr> <br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">404</font><wbr>：未找到请求的文件</font><wbr> <br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">500</font><wbr>：服务器内部错误</font><wbr> <br />
<br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">responseXML</font><wbr>：响应的内容，表现为<font style="line-height: 1.3em" face="Times">XML</font><wbr>格式</font><wbr> <br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">Web</font><wbr>程序是基于请求<font style="line-height: 1.3em" face="Times">-</font><wbr>响应模式的，响应是由服务器发送给客户端的一些数据，这个属性中存储了响应的数据</font><wbr> <br />
<br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">onreadystatechange</font><wbr>：事件</font><wbr> <br />
<font style="font-size: small; line-height: 1.3em">当<font style="line-height: 1.3em" face="Times">XHR</font><wbr>的状态改变时触发的事件。最常用的情况是：当我们向服务器发送了某个请求，服务器正确响应后。我们可以设置一个函数来处理这次响应。</font><wbr> <br />
<font style="font-size: small; line-height: 1.3em">以上是<font style="line-height: 1.3em" face="Times">XHR</font><wbr>最常用的几个属性。一会再例子里还会见到他们。下边是常用方法：</font><wbr> <br />
<br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">open(method,url,asyschronous,user,password);</font><wbr></font><wbr> <br />
<font style="font-size: small; line-height: 1.3em">这是<font style="line-height: 1.3em" face="Times">open</font><wbr>方法，调用这个方法後，<font style="line-height: 1.3em" face="Times">readystate</font><wbr>会从<font style="line-height: 1.3em" face="Times">0</font><wbr>变为<font style="line-height: 1.3em" face="Times">1</font><wbr>；</font><wbr> <br />
<font style="font-size: small; line-height: 1.3em">如果仔细看这个方法的参数列表的话，可能会发现一个问题：参数缺少数据类型。如果你够聪明的话，一定会想到，这是一个在<font style="line-height: 1.3em" face="Times">javascript</font><wbr>中执行的方法。<font style="line-height: 1.3em" face="Times">js</font><wbr>的变量是不区分数据类型的。</font><wbr> <br />
<br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">method </font><wbr>：请求的类型，<font style="line-height: 1.3em" face="Times">get</font><wbr>或<font style="line-height: 1.3em" face="Times">post</font><wbr></font><wbr> <br />
<br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">url </font><wbr>：请求的地址，可以是相对路径或绝对路径。可以写成：<font style="line-height: 1.3em" face="Times">test.jsp?user=dodo&amp;pass=123456</font><wbr>这种类型的带查询字符串的格式。</font><wbr> <br />
<br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">asyschronous </font><wbr>：是否异步调用。<font style="line-height: 1.3em" face="Times">true</font><wbr>为异步，<font style="line-height: 1.3em" face="Times">false</font><wbr>为同步。</font><wbr> <br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">user</font><wbr>，<font style="line-height: 1.3em" face="Times">password</font><wbr>：如果路径是需要用户名和密码的加密路径，在这两个参数中提供。一般来说没什么用。</font><wbr> <br />
<font style="font-size: small; line-height: 1.3em" face="Times">---------------------------------------------------------------------------------------------------------</font><wbr> <br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">send(databody);</font><wbr></font><wbr> <br />
<font style="font-size: small; line-height: 1.3em">向服务器发送数据</font><wbr> <br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">databody</font><wbr>：要发送的数据</font><wbr> <br />
<font style="font-size: small; line-height: 1.3em">如果不需要发送数据的话直接写：<font style="line-height: 1.3em" face="Times">null</font><wbr></font><wbr> <br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">abort();</font><wbr></font><wbr> <br />
<font style="font-size: small; line-height: 1.3em">取消当前请求</font><wbr> <br />
<font style="font-size: small; line-height: 1.3em">以上就是<font style="line-height: 1.3em" face="Times">XHR</font><wbr>常用的属性和方法了。大家可以记记个大概。在例子中我会继续提到他们的。</font><wbr> <br />
<br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">四、</font><wbr>例子的说明</font><wbr><br />
<font style="font-size: small; line-height: 1.3em">这是一个很小的例子。只是说明了<font style="line-height: 1.3em" face="Times">Ajax</font><wbr>程序的工作流程。我们要做的是把<font style="line-height: 1.3em" face="Times">xml</font><wbr>中的内容显示在网页上。</font><wbr><br />
<br />
<font style="font-size: small; line-height: 1.3em">首先，和<font style="line-height: 1.3em" face="Times">java</font><wbr>一样，要使用对象，就要先实例化它。</font><wbr><br />
<font style="font-size: small; line-height: 1.3em">在这，我们使用<font style="line-height: 1.3em" face="Times">javascript</font><wbr>语言来实现。</font><wbr><br />
<br />
<font style="font-size: small; line-height: 1.3em" face="Times">function createXHR(){</font><wbr><br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">&nbsp;&nbsp;if(window.ActiveXObject){</font><wbr></font><wbr><br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">&nbsp;&nbsp;&nbsp;&nbsp;XHR = new ActiveXObject("Microsoft.XMLHTTP");</font><wbr></font><wbr><br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">&nbsp;&nbsp;}else if(window.XMLHttpRequest){</font><wbr></font><wbr><br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">&nbsp;&nbsp;&nbsp;&nbsp;XHR = new XMLHttpRequest();</font><wbr></font><wbr><br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">&nbsp;&nbsp;}</font><wbr></font><wbr><br />
<font style="font-size: small; line-height: 1.3em" face="Times">}</font><wbr><br />
<br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; window.ActiveXObject</font><wbr>用来检测当前页面是不是支持<font style="line-height: 1.3em" face="Times">ActiveX</font><wbr>技术，如果支持的话那么客户端就是<font style="line-height: 1.3em" face="Times">IE</font><wbr>。</font><wbr><br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; window.XMLHttpRequest</font><wbr>用来检测浏览器能不能直接创建<font style="line-height: 1.3em" face="Times">XHR</font><wbr>对象。如果能的话，就直接<font style="line-height: 1.3em" face="Times">new</font><wbr>出来。</font><wbr><br />
<font style="font-size: small; line-height: 1.3em">这么做的原因是：虽然<font style="line-height: 1.3em" face="Times">web</font><wbr>遵循的是同一套接口和标准，但是生产浏览器的厂家实现的方式却不一样。比如<font style="line-height: 1.3em" face="Times">IE</font><wbr>和<font style="line-height: 1.3em" face="Times">FireFox</font><wbr>等。</font><wbr><br />
<font style="font-size: small; line-height: 1.3em">在<font style="line-height: 1.3em" face="Times">IE</font><wbr>中<font style="line-height: 1.3em" face="Times">XHR</font><wbr>是通过<font style="line-height: 1.3em" face="Times">ActiveX</font><wbr>控件的形式提供的。而其他浏览器则罢<font style="line-height: 1.3em" face="Times">XHR</font><wbr>作为了内置对象来实现。因此在不同的浏览器中，实例化<font style="line-height: 1.3em" face="Times">XHR</font><wbr>的方式也不一样。</font><wbr><br />
<br />
<font style="font-size: small; line-height: 1.3em">现在我们得到了一个<font style="line-height: 1.3em" face="Times">XHR</font><wbr>对象。那么他现在的<font style="line-height: 1.3em" face="Times">readystate</font><wbr>是为<font style="line-height: 1.3em" face="Times">0</font><wbr>的。下面，我们来调用它的<font style="line-height: 1.3em" face="Times">open</font><wbr>方法。</font><wbr><br />
<br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XHR.open("get","someURL",true);</font><wbr></font><wbr><br />
<br />
<font style="font-size: small; line-height: 1.3em">调用<font style="line-height: 1.3em" face="Times">open</font><wbr>方法的后，<font style="line-height: 1.3em" face="Times">readystate</font><wbr>会变成<font style="line-height: 1.3em" face="Times">1</font><wbr>。向服务器发送请求的准备工作都做好了</font><wbr><br />
<br />
<font style="font-size: small; line-height: 1.3em" face="Times">XHR.send(null);</font><wbr><br />
<br />
<font style="font-size: small; line-height: 1.3em">调用<font style="line-height: 1.3em" face="Times">send</font><wbr>方法，发送请求。</font><wbr><br />
<br />
<font style="font-size: small; line-height: 1.3em">发送请求后，就等着服务器传回响应了。那么我们怎么知道服务器有没有响应呢？</font><wbr><br />
<br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">//</font><wbr>处理响应的函数</font><wbr><br />
<font style="font-size: small; line-height: 1.3em" face="Times">function handleChange(){</font><wbr><br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">&nbsp;&nbsp;//</font><wbr>当<font style="line-height: 1.3em" face="Times">Http</font><wbr>状态为<font style="line-height: 1.3em" face="Times">200</font><wbr>并且<font style="line-height: 1.3em" face="Times">readystate</font><wbr>为<font style="line-height: 1.3em" face="Times">4</font><wbr>时，才正确的返回了响应。</font><wbr><br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">&nbsp;&nbsp;if(XHR.readystate==4){</font><wbr></font><wbr><br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">&nbsp;&nbsp;&nbsp;&nbsp;if(XHR.status==200){</font><wbr></font><wbr><br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//</font><wbr>获取<font style="line-height: 1.3em" face="Times">XHR</font><wbr>返回的<font style="line-height: 1.3em" face="Times">XML</font><wbr>格式的响应信息</font><wbr><br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmldoc = XHR.responseXML;</font><wbr></font><wbr><br />
<br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//</font><wbr>解析<font style="line-height: 1.3em" face="Times">XML</font><wbr>文档取得用户名和密码</font><wbr><br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var un = xmldoc.getElementsByTagName("name")[0].text;</font><wbr></font><wbr><br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var pass = xmldoc.getElementsByTagName("pass")[0].text;</font><wbr></font><wbr><br />
<br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//</font><wbr>验证用户名和密码</font><wbr><br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(document.getElementById("username").value == un){</font><wbr></font><wbr><br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(document.getElementById("password").value == pass){</font><wbr></font><wbr><br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//</font><wbr>用<font style="line-height: 1.3em" face="Times">innerHTML</font><wbr>属性来实现无状态刷新</font><wbr><br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.body.innerHTML = "</font><wbr>验证成功！<font style="line-height: 1.3em" face="Times">";</font><wbr></font><wbr><br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</font><wbr></font><wbr><br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</font><wbr></font><wbr><br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">&nbsp;&nbsp;&nbsp;&nbsp;}</font><wbr></font><wbr><br />
<font style="font-size: small; line-height: 1.3em"><font style="line-height: 1.3em" face="Times">&nbsp;&nbsp;}</font><wbr></font><wbr><br />
<font style="font-size: small; line-height: 1.3em" face="Times">}</font><wbr><br />
<br />
<font style="font-size: small; line-height: 1.3em">请注意一开始的两个<font style="line-height: 1.3em" face="Times">if</font><wbr>判断。通过这两个判断的组合，我们就能确定服务器已经正确的响应了我们的请求了。</font><wbr><br />
<font style="font-size: small; line-height: 1.3em">然后就可以开始处理响应信息。</font><wbr><br />
<br />
<font style="font-size: small; line-height: 1.3em">到这里，整个<font style="line-height: 1.3em" face="Times">Ajax</font><wbr>请求和获取效应的流程就结束了。至于如何处理响应信息就要看实际情况了。</font>
 <img src ="http://www.blogjava.net/fenris/aggbug/164584.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fenris/" target="_blank">Fenris</a> 2007-12-02 02:49 <a href="http://www.blogjava.net/fenris/archive/2007/12/02/164584.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>这些天做一个网页，发现了js和css一些有趣的问题。</title><link>http://www.blogjava.net/fenris/archive/2007/11/29/164020.html</link><dc:creator>Fenris</dc:creator><author>Fenris</author><pubDate>Thu, 29 Nov 2007 08:11:00 GMT</pubDate><guid>http://www.blogjava.net/fenris/archive/2007/11/29/164020.html</guid><wfw:comment>http://www.blogjava.net/fenris/comments/164020.html</wfw:comment><comments>http://www.blogjava.net/fenris/archive/2007/11/29/164020.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fenris/comments/commentRss/164020.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fenris/services/trackbacks/164020.html</trackback:ping><description><![CDATA[<div>这些天做一个网页，发现了js和css一些有趣的问题。 </div>
<div>1.不同的标准，不同的效果 </div>
<div>首先是css，原来一直用ie7和ff的浏览器，网页的效果也一直和想象中一样。然而新装系统后，ie的版本降为6的时候，问题出现了。 </div>
<div>在网页中一个div元素的css如下： </div>
<div>.i-top-3btn-1{ </div>
<div>background-color:#e8f2fc; </div>
<div>} </div>
<div>&shy;</div>
<div>.i-top-3btn-1:hover{ </div>
<div>background-color:#990000; </div>
<div>} </div>
<div>&shy;</div>
<div>这两个类可以控制这个层在鼠标经过时显示不同的背景色，要达到这个效果当然也可以用js在div上做事件来实现，但是使用css中的伪类&#8220;:hover&#8221;则减轻了不少的编码量，也让代码看起来很清秀。 </div>
<div>&shy;</div>
<div>这个&#8220;:hover&#8221;伪类，在ie7和ff下正常的表现出了鼠标经过变化底色的效果，而在ie6下却没有反应。经过一番资料查找，才发现，ie7和ff实现的是css2标准，而ie6只实现了一部分的css1标准。 </div>
<div>&shy;</div>
<div>在css1中，伪类&#8220;:hover&#8221;只有&#8220;a&#8221;标记才能正确表现。而其他标记都不支持&#8220;:hover&#8221;伪类。在css2中，所有的标记都开始支持&#8220;:hover&#8221;这个伪类了。 </div>
<div>&shy;</div>
<div>我的项目中，div里本来就应该是一个链接，所以加上&#8220;a&#8221;标记并不会对我的布局以及效果产生太大的影响，然而如果只是淡出的想让div或其它元素产生背景色变化的话，最好的解决方法可能还是在元素上做事件吧。 </div>
<div>&shy;</div>
<div>2.for的陷阱 </div>
<div>早在看js面向对象方式编程的一些书籍的时候，就看到了这样的写法： </div>
<div>&shy;</div>
<div>for(var i in obj){ </div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(i); </div>
<div>} </div>
<div>&shy;</div>
<div>通过这样的方法，可以准确的获知对象obj的所有成员的名称。这也被称之为js的反射机制。 </div>
<div>&shy;</div>
<div>而这次做项目的时候由于在页面加载时要同时执行大量的函数，所以按照ajax in action 一书中的建议，使用Observer模式变现启动加载的代码： </div>
<div>&shy;</div>
<div>//首先声明一个数组型变量，把要在启动时加载的函数全部存春在这个数组中。 </div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var __SYS_Startup_Funcs = new Array(); </div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </div>
<div>//提供一个方法，让程序员可以把要在启动时加载的函数存放到先前声明的数组里。 </div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function registerStartup(pFunction){ </div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__SYS_Startup_Funcs.push(pFunction); </div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </div>
<div>&shy;</div>
<div>//替换系统的onload函数以达到加载启动的目的。 </div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.onload = function (){ </div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font class="lightFont" title="发光字" style="filter: glow(color=#FF0000,strength=3); color: #ff0000; height: auto">for(var i in __SYS_Startup_Funcs){ </font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#FF0000,strength=3); color: #ff0000; height: auto">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i.call();</font> </div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#FF0000,strength=3); color: #ff0000; height: auto">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</font> </div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </div>
<div>红色的这段代码是郁闷我很久的根源，按照常理，每次循环就从&#8220;__SYS_Startup_Funcs&#8221;中取出一个函数，并调用这个函数的call方法来执行它。 </div>
<div>但是在执行时发生错误：&#8220;对象不支持此方法或属性&#8221;。 </div>
<div>&shy;</div>
<div>这是人很迷惑，因为call方法是属于Function这个对象的，而每一个函数都是继承自Function的。为什么产生这样的错误呢？ </div>
<div>&shy;</div>
<div>于是开始排错，首先用alert(i)来打印。对话框中显示的正好是我传进去的函数名。于是换另外一种方式alert(typeof(i))来打印。对话框中显示的是&#8220;string&#8221;。 </div>
<div>这次的结果出乎我意料，但是却直接指出了这段代码的错误所在。 </div>
<div>&shy;</div>
<div>在查阅资料后，见到这样一段话： </div>
<div>&shy;</div>
<div>Javascript 提供了一种特别的循环方式来遍历一个对象的所有用户定义的属性或者一个数组的所有元素。for...in 循环中的循环计数器 是一个字符串，而 不是数字 。它包含了当前属性的名称或者表示当前数组元素的下标。 </div>
<div>&shy;</div>
<div>根据这个特性，我们取出来的并不是集合中的一个元素，而是这个元素的名字！ </div>
<div>&shy;</div>
<div>这样的错误显然是受了c#和java这样面向对象语言的影响。</div>
 <img src ="http://www.blogjava.net/fenris/aggbug/164020.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fenris/" target="_blank">Fenris</a> 2007-11-29 16:11 <a href="http://www.blogjava.net/fenris/archive/2007/11/29/164020.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>