缓存引起的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做了处理?最近比较忙,此疑问待有时间后再来研究。也欢迎各位朋友提出看法。

发表评论

电子邮件地址不会被公开。 必填项已用*标注