Ajax在FireFox中的一个BUG
2008-03-11 12:50
225 查看
今天在FireFox中测试Ajax,老出现问题!晕倒了..看了一大堆E文后终于找到一个离奇的解决方法.
首先,已经定义如下函数:
createXMLHTTP() ------ 兼容IE和FF的创建xmlhttp对象函数
//XMLHTTP返回数据
function getResponse(method,action,aysnc,s_str,datatype)...{
xmlhttp.open(method,action,aysnc);
if(s_str=="")
return true;
if(method=="post")
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlhttp.onreadystatechange = function()...{
if(xmlhttp.readyState == 4)...{ //收到所有数据
if(xmlhttp.status == 200)...{ //消息正确
///..成功获得数据,处理xmlhttp.responseText或者xmlhttp.responseXML
};
xmlhttp.send(s_str);
return true;
}
//对check的onclick动作发送信息
function sendmessage()...{
var checked;
if(this.checked)
checked=1;
else
checked=0;
var s_str="id="+this.value+"&checked="+checked;
getResponse("post","**.php",true,s_str,"text/plain");
}
这还不是完整的代码,大概情况就这样吧,然后在IE中测试完全没问题.在FF中测试后,发现此问题:
听说问题是由于FF的一个很深奥的BUG,上了百度,GOOGLE找..终于找到解决的办法.
首先,要在xmlhttp.onreadystatechange下加上try..catch语句,以防止错误终止程序.try包含xmlhttp.onreadystatechange下所有语句.然后在getResponse进行之前,加入xmlhttp=false;xmlhttp=createXMLHttp; 然后把getresponse函数放进setTimeout中,时间设置为0即可,更保险的方法是再在catch中再加入setTimeout函数重启发送信息程序即可解决.
问题分析:根据其解决方法,我估计类似情况的解决方法是重启xmlhttp,即把xmlhttp重新输入对象.根据以往经验,这很可能是FF中一些残留的信息导致xmlhttp前一次的信息仍未完全注销而导致.所以重置一下xmlhttp对象,而加入setTimeout(函数,0)这样的代码,估计是setTimeout能处理的FF中BUG的一个问题的解决方法吧..
以后遇到这种类似的情况,可以试试这种方法吧~~
首先,已经定义如下函数:
createXMLHTTP() ------ 兼容IE和FF的创建xmlhttp对象函数
//XMLHTTP返回数据
function getResponse(method,action,aysnc,s_str,datatype)...{
xmlhttp.open(method,action,aysnc);
if(s_str=="")
return true;
if(method=="post")
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlhttp.onreadystatechange = function()...{
if(xmlhttp.readyState == 4)...{ //收到所有数据
if(xmlhttp.status == 200)...{ //消息正确
///..成功获得数据,处理xmlhttp.responseText或者xmlhttp.responseXML
};
xmlhttp.send(s_str);
return true;
}
//对check的onclick动作发送信息
function sendmessage()...{
var checked;
if(this.checked)
checked=1;
else
checked=0;
var s_str="id="+this.value+"&checked="+checked;
getResponse("post","**.php",true,s_str,"text/plain");
}
这还不是完整的代码,大概情况就这样吧,然后在IE中测试完全没问题.在FF中测试后,发现此问题:
听说问题是由于FF的一个很深奥的BUG,上了百度,GOOGLE找..终于找到解决的办法.
首先,要在xmlhttp.onreadystatechange下加上try..catch语句,以防止错误终止程序.try包含xmlhttp.onreadystatechange下所有语句.然后在getResponse进行之前,加入xmlhttp=false;xmlhttp=createXMLHttp; 然后把getresponse函数放进setTimeout中,时间设置为0即可,更保险的方法是再在catch中再加入setTimeout函数重启发送信息程序即可解决.
问题分析:根据其解决方法,我估计类似情况的解决方法是重启xmlhttp,即把xmlhttp重新输入对象.根据以往经验,这很可能是FF中一些残留的信息导致xmlhttp前一次的信息仍未完全注销而导致.所以重置一下xmlhttp对象,而加入setTimeout(函数,0)这样的代码,估计是setTimeout能处理的FF中BUG的一个问题的解决方法吧..
以后遇到这种类似的情况,可以试试这种方法吧~~
相关文章推荐
- FireFox的一个bug
- ajax post中在firefox返回值一个值得注意的地方
- 关于一个Ajax的bug
- MS Atlas(AJAX Control Toolkit)示例项目的一个小bug
- 一个ajax的bug
- ASP.NET AJAX Futures January CTP中的一个Bug
- FireFox的一个bug
- 似乎是发现了asp.net ajaxToolkit中TAB控件的一个BUG
- JQuery1.4.2的AJAX的一个bug
- msn上的tab功能Firefox对childNodes处理的一个BUG
- 报告csdn blog一个firefox增加圈子的bug
- ajax post中在firefox返回值一个值得注意的地方
- Google AJAXSLT 的一个bug修正
- ASP.NET MVC的Ajax.ActionLink 的HttpMethod="Get" 一个重复请求的BUG
- 后台使用Spring MVC 4.15 版本 通过 ajaxFileUpload plugin插件上传文件相应时引起的一个小问题,Chrome、Firefox中出现SyntaxError:unexpected token <
- Google AJAXSLT 的一个bug修正
- ajax post中在firefox返回值一个值得注意的地方
- ASP.NET AJAX Advance Tips & Tricks (9) DropDownList在Firefox下的奇怪现象和解决方案——谁的BUG?