缓存引起的Ajax中的onreadystatechange无值的问题

  前几天在帮别人改一个网站,要实现用Ajax去进行无刷新的点评功能。
  忙活了半天,终于把功能做出来了。最后一步就是做最终测试了。测试的时候,发现了一个奇怪的问题:在FireFox下没有任何问题,在Maxthon或者IE6下,首次打开页面,一切正常,刷新一下就不执行任何操作了。其中关键的代码如下(加了我的调试代码):[code]FCKXml.prototype.request = function( url , postString , fmethod , asyncFunctionPointer , funcParam )
{
var C = this.getTransport();
C.open( fmethod , url , true );
if(fmethod==”post”)
C.setRequestHeader( 'Content-Type' , 'application/x-www-form-urlencoded' );
C.send( postString );
alert(“start loading”);//用来检测是否执行到了这一步,每次都有,说明有执行到这
C.onreadystatechange = function ()
{alert(C.readyState)//显示状态值,以便清楚地知道状态有没有改变,IE下刷新后没反应
if( C.readyState == 4 )
{
if(asyncFunctionPointer)
{
if ( C.status==200 || C.status==304 )
{
asyncFunctionPointer( C );
}
}
}
}
}[/code]
  经过测试发现,原来是onreadystatechange状态无任何变化。但不知道是什么原因引起的。无奈之中跑到CSDN上提问,一个朋友的回答提醒了我,于是我去测试了下C.responseText发现刷新后是直接有值了。这下我恍然大悟,看来是缓存惹的祸,直接从缓存里读取数据,没有向服务器提交查询的过程,当然就不会有状态的改变了。为了验证我的想法,我把用来处理查询并返回值的页面做了禁止缓存处理。再一调试,一切正常。
  问题是解决了,但不知道为什么在FF下不会直接读取缓存,难道FF已经针对Ajax做了处理?最近比较忙,此疑问待有时间后再来研究。也欢迎各位朋友提出看法。

重回图书馆

  很早就想办一张温州图书馆的读者证。由于各种原因,一拖再拖,拖到现在。
  前几天和QQ上一朋友聊到图书馆,而且,现在住的地方离图书馆很近,于是,办证事件又提上了我的日常议程。
  前天,去温图网站下载申请单,了解办证要求,填写好表单。今天早上一早就带着证件直奔图书馆。到了那,发现已经有几个人在排除办理办证年审等事项。一切顺利,半小时不到就拿到了我期盼已久的读者证。
  拿到证后,看了下工作人员给的外借指南及一些规定,然后就去检索台查了下我想借的书,得知在四楼。上到四楼后,正好前面也有个人要进外借室,我就按他的做法,刷卡,拿代书牌。由于还要上班,只好匆匆选了本书。然后到前台办理外借手续,发现还有自助借书平台,第一次用这玩意,在扫描书时,不知道操作要点,半天没扫描好,后来在工作人员的指点下,终于完成了。
  自从出校后,已经没去过图书馆了,今天重回图书馆,感觉真好。
  以后我会继续发扬在学校里泡图书馆的精神,好好学习,天天向上。

CSS定位中Position的absolute及Relative等的研究

  用Div+CSS进行网站布局时,做一些浮动层等特殊特殊效果时要考虑到定位问题。这就要用到Positoin属性等。
  [b]Position[/b]属性有四个值: static、fixed、absolute和relative,后面两个在布局中的定位里是经常用到的,顾名思义,[b]absolute[/b]是指绝对定位,即将对象从文档流中拖出,使用left,right,top,bottom等属性进行绝对定位,而其层叠通过z-index属性定义。此时对象不具有边距,但仍有补白和边框。[b]ralative[/b]是指相对定位,就是依据left,right,top,bottom等属性在正常文档流中偏移位置。
  但是,怎么个绝对法,又怎么个相对法呢?以前我一直没有仔细去研究它,到具体应用时有时会有点迷糊,我相信很多朋友也会有这样的问题。今天我特意测试了一下,得出了以下结论:

[b]1、当Position属性值为Relative时[/b]
[color=Red]对象原来占有的位置保留,其后面的对象按原来文档流仍然保持原来的位置[/color]
Top的值表示对象相对原位置向下偏移的距离
bottom的值表示对象相对原位置向上偏移的距离
两者同时存在时,只有Top起作用。

left的值表示对象相对原位置向右偏移的距离
right的值表示对象相对原位置向左偏移的距离
两者同时存在时,只有left起作用。

[b]2、当Position属性值为absolute时[/b]
[color=Red]对象从文档流中抽取出来,原占有的位置被后面的对象顶替上来[/color]
Top的值表示对象上边框与浏览器窗口顶部的距离
bottom的值表示对象下边框与浏览器窗口底部的距离
[color=Blue]两者同时存在时,只有Top起作用;如果两者都未指定,则其顶端将与原文档流位置一致,即垂直保持位置不变。[/color]

left的值表示对象左边框与浏览器窗口左边的距离
right的值表示对象右边框与浏览器窗口右边的距离
[color=Blue]两者同时存在时,只有left起作用;如果两者都未指定,则其左边将与原文档流位置一致,即水平保持位置不变。[/color]

  [color=Red]在Position属性值为absolute的同时,如果有一级父对象(无论是父对象还是祖父对象,或者再高的辈分,一视同仁,^_^)的有Positoin属性时,则上述的相对浏览器窗口定位将会变成相对与其最近的一个定位的父对象定位,这对精确定位是很有帮助的。[/color]
  更多有关CSS的说明请参考手册:http://www.biglee.cn/books/css/

  辛苦了半天得出的结论,希望对大家有用。如果有疏忽之处,还请指正。

CSS中文手册外加树形折叠菜单

  鉴于有时要用到CSS手册,为了方便随时随地可用,今天花了点时间整理了一下别人做好的,同时练练写JS脚本,用JS写了左侧导航的折叠与展开效果的树形菜单。
  这是通用于UL与LI菜单的折叠与展开脚本,免去了给各对象编ID的麻烦。不过,为了达到展开一个节点,另一个已经展开节点同时关闭的效果,我就编了两个ID来初始化已经展开节点。
  JS脚本代码如下:[code]
[/code]
  页面代码如下:[code]


[/code]
  废话不多说,有兴趣的,看效果:[url=http://www.biglee.cn/books/css/]http://www.biglee.cn/books/css/[/url]
  最后声明:此手册版权归苏沈小雨所有。

用老电脑和老U盘Diy硬件防火墙

  我们经常在讨论着到底哪一款防火墙功能最强,对系统保护最安全。耳中听到的常常是“天网”、“瑞星防火墙”、“金山防火墙”等,其实真正功能强大而安全的往往是一些硬件防火墙。不过硬件防火墙对于普通用户来说,几乎是可望而不可即的。那么真的就没有办法用上硬件防火墙了吗?
  老机配老U盘,发挥潜力
  所谓的硬件防火墙,也不过是在一些硬件设备上面,写入了防火墙程序而已,将防火墙的功能执行转由硬件设备上的芯片执行而已,因此可以实现极为强大的运算过滤功能。其实只要我们拥有因此的硬件设备和防火墙程序,也同样可以打造出自己的硬件防火墙。
  普通用户能有这样的设备吗?其实,只需要一张U盘或光盘,一台淘汰的旧电脑就可以了。硬件要求非常低,古董级的486都可以,只要有CPU、显卡、内存、2张网卡就足够了,什么声卡、显示器、硬盘之类的都不需要!
  至于安装在硬件设备上的防火墙软件,可以使用一个叫做m0n0wall的软件
    M0n0wall简介及安装
    M0n0wall其实是一个基于FreeBsd内核开发的免费软件防火墙。m0n0wall提供基于web的配置管理、提供VPN功能、支持DHCP Server、DNS转发、动态DNS、lpsec、流量控制、无线网络支持等功能。我们可以将这个软件直接写入可引导的光盘或U盘等设备中,直接由这些设备引导系统,提供硬件防火墙的支持。
    首先,我们需要下载M0n0wall系统(下载地址:http://m0n0.ch/wall/download.php?file=net48xx-1.3b11.img)和physdiskwrite工具(下载地址:http://www.m0n0.ch/wall/downloads/physdiskwrire-0.5.zip),将两个文件解压后放在“c:m0n0”目录下。将U盘接上电脑,硬盘不需要有多大的空间,只要8MB以上就可以了。然后打开命令提示符窗口,执行如下命令:
cd c:m0n0
physdiskwrite.exe-u net48xx-1.3b11.img
    命令执行后,自动检测当前系统中的硬盘及移动存储设备,并显示出所有存储设备的序号及相关参数。一般来说,如果新机上只有一个硬盘,那么接上的U盘序号就为“PhysicalDrive 1”;如果系统中有两块硬盘,则U盘序号就为“PhysicalDrive2”,以此类推。
    在命令行窗口中会提示“Which disk do you want to write?(0..1)”,询问要选择写入哪个磁盘,因为这里有两个硬盘,U盘的序号为2,所以选择2。确定后,开始写入程序,屏幕显示“6291456/6291456 bytes written in total”,则说明m0n0wall系统已经安装到U盘中了。
    小提示:注意不要选错设备序列号,否则相应硬盘中的数据将全部被清除!另外,我们也可以将m0n0wall写入硬盘或光盘中,写入硬盘的方法与写入U盘一样,只要选择相应的序列号就可以了。写入光盘的话,则需要下载光盘片M0n0wall系统(下载地址:http://m0n0.ch/wall/download.php?file=cdrom-1.3b11.iso),将其记录到光盘上即可。
    设置网络连接
    写入M0n1wall系统后,取下U盘,将其接入旧电脑上。然后需要设置旧电脑的网络连接。要求旧电脑机有两张网卡,设置方法很简单:
    从ADSL猫的输出口,将网线连接到旧电脑的一张网卡上,再从另一张网卡与交换机或集线器的WAN端口就可以了。也就是说,仅仅是在原来的网关出口前加上了旧电脑。
    启动硬件防火墙
    启动旧电脑,设置为U盘引导系统,如果是写入其它硬盘或光盘上,则设置为相应的设备来引导系统。
    小提示:旧电脑可以没有显示器,引导系统进行设置时,可以将新电脑的显示器接上,设置完后取下来,以后不用显示器即可启动硬件防火墙。
    系统菜单
    系统启动后,将会引导入linux系统,M0n0wall会自动检测网络环境和设备,并出现网络设置菜单。下面对菜单进行简单介绍:
    第1项“lnterfaces: assignnetwork ports”(网卡:指定网络端口),用于指定安装的网卡,用哪一块连接WAN,哪一块连接LAN:
    第2项“Set UP LAN IP Address”(设定LAN网卡的IP地址),该项用于设置网络中访问防火墙的IP地址;
    第3项“Reset WebGui Password”(重设Webgui密码为Mono),该项用于恢复防火墙配置密码;
    第4项“Reset to factory defaults”(恢复成出厂设置),表示恢复所有设置项为默认值。
    设置网络端口
    这里我们首先要设置网卡端口,输入“1”并回车,系统检测到两张网卡,并显示其设备名。这里两张网卡的设备名分别为“Lnc0”和“Lnc1”,注意是数字“1”,而不是字母“I”。系统提示是否设置对VLAN(虚拟局域网)的支持,回答N。然后系统接着提示:“Enter the LAN interface name or‘a’for auto-detection:”(输入LAN网卡名称或输入a自动检测),在这里输入“IncO”,回车后系统再提示“Enter the WAN interface name or‘a’for auto-detection:”,要求输入WAN网卡名称,这里输入“Inc1”。
    回车后系统再提示“Enter the Option 1 i……”,按回车键后,系统将显示当前的配置,这里为:
LAN——Inc0
WAN——lnc1
    正确的显示了LAN和WAN配置,说明设置成功。系统提示“The firewall will reboot after saving the changes……”,输入y,自动保存设置后,系统将重新启动。
    小提示:在要求输入的网卡名称时,不同品牌的网卡的名称是不一样的,例如RTL8139系列网卡提示为“rtlx”,530tx网卡提示为“dfex”,Intel网卡提示为“fxpx”。本文中显示的是Lnc,实现过程中,需要根据屏幕显示输入。
    设置WEB管理IP地址
    重启后进入系统菜单,输入“2”进行LAN IP设置。然后提示要求输入IP地址,默认地址是“192.168.1.1”。一般来说,因为网络中还有其它的设备,比如ADSL MODEM和路由等,它们出厂默认IP也是“192.168.1.1”,因此可将硬件防火墙的IP地址改变“192.168.1.2”等。然后要求设置子网掩码,一般的子网掩码就是“255.255.255.O”之类的,直接输入代码24就可以了。回车后,要求设置是否启用DHCP动态IP分配,一般无需启用,输入n,回车后即可完成配置。
    防火墙设置
    重启后,现在旧电脑已经变成一个硬件防火墙了,它的执行效率可远远比在自己的电脑上运行防火墙高得多,而且防火墙本身的功能也非常强。
    登录防火墙设置界面
    在局域网中的其它电脑上,打开浏览器,在浏览器的地址栏中输入防火墙默认的WEB管理IP地址“http://192.168.1.2”,回车后要求输入用户名和密码。登录的默认用户名为“admin”,密码为“mono”(英文字母o,非数字0),确定后就可以登录WEB管理界面了。
    应用实例:流量控制
    m0n0wall具有强大流量控制功能,可以对基于IP地址、mac地址、网段、p2p软件、协议等方式来实现对上传下载速度的控制。例如要求限制IP地址为“192.168.1.20”的计算机下载速度不得超过“20Kbit/S”,可进行如下操作:点击“防火墙”→“流量管理”,勾选“启用流量管理”项,点击“保存”按钮进行保存。然后点击左侧的“规则”→“管道”项,在右边的“Bandwidth”(带宽)处输入“20”,“Description”描述处随意输入一些说明,其它设置不可以不设。然后在规则中,设置“address”处为要控制的IP地址,其他设置一般可以不设,最后保存设置即可控制指定IP的流量了。
    m0n0wall的功能非常强大,比一般的软件防火墒强上无数倍!可以设置界面中进行各种防火墙安全设置,此外,m0n0wall本身还具备路由功能,可以充当路由器,大可以省下共享上网买路由器的钱了!也就是说,我们现在有了一个免费的路由器和防火墙结合的产品!

 
具体的配置
  用写好的DOM或硬盘启动之后,屏幕上会显示如下图:
  按数据键“1”,出现下图:
  这里是设置VLAN的,我们不需要,所以就按“n”出现下图:
  

  这是设置用于内网的网卡,这儿根据图上黄框圈出的2个名字里选择一个作为内网,我这里选择的是lnc0
  写好lnc0之后,按回车,出现如下图:
  这是选择外网网卡,这里我输入另外一块网卡lnc1,之后按回车。出现如下图:
  这里是设置Optional口的,我们没有,所以直接回车结束。出现如下图:
  它询问我们是否继续进行,我们选“y”回车之后,系统会马上自动重新启动,等它启动之后,出现如下的画面:
  如果黄色框里的LAN和WAN的名字都是刚才我们设置好的名字,那就说明已经成功了!这时候,我们就可以通过客户端用WEB浏览器进行配置了。
在Windows中的配置
  我们现在需要把WINDOWS的客户机的IP设置为192.168.1.X,这里的X可以是从2开始到254;子网掩码:255.255.255.0,网关为:192.168.1.1;DNS服务器可以设置为你当地ISP的DNS服务器地址,我是苏州电信的用户,所以我设置的2个DNS服务器是:61.177.7.1备用DNS为:221.228.255.1,设置如下图: