为什么在Firefox下不行,是兼容问题,求教?

antybaby 2010-09-27 02:59:45
一个简单的AJAX调用,就是返回一个字符串"I LOVE YOU",在IE下可以,但是在Firefox下就不行了,但是在Firebug中调试可以看到有返回的呀...郁闷...想请教下高手们,是我的函数不兼容吗?还是什么其它问题....
代码:(2个文件)
前台页:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<script type="text/javascript">
function GetXmlHttpObject()
{
var xmlHttp=null;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}
function GetResult(){
var linkurl="/test/ajax.asp";
if(linkurl==""){return false;}
xmlHttp=GetXmlHttpObject();
if (xmlHttp==null){alert ("您的浏览器不支持AJAX!"); return;}
xmlHttp.open("GET",linkurl,false);
xmlHttp.onreadystatechange = callback;//触发callback事件,以判断信息是否正确
xmlHttp.send(null);
}
function callback(){
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
var rs=xmlHttp.responseText;
//alert(rs);
if (rs!=null){
document.getElementById("content").innerHTML=rs;
}
else{alert("对不起!发生错误了° △ °|||")}
}
}
}
</script>
</head>
<body>
<div><a href="javascript:void(0);" onclick="GetResult();">click me!</a></div>
<div id="content"></div>
</body>
</html>

处理页(ajax.asp)
<%response.Charset="gb2312"
Response.Expires=0
str="<h1>I LOVE YOU FOREVER!</h1>"
response.Write str
%>

...全文
120 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
antybaby 2010-09-28
  • 打赏
  • 举报
回复
问题解决
解决方法:统一用TruE,还原AJAX本色.如果真的需要用FALSE可以做一个浏览器的版本判定在做一步IF---ELSE---

感谢IBM_hoojo,帮我解决过两次问题了.变量未全局确实是我忽略了的问题,有点大意了..呵呵...
也同时感谢net_lover无私的帮助...

出现这个问题元凶就是浏览器的同步异步机制不一样...(又是浏览器的混战° △ °|||)我使用的是Firefox3.
在firefox2及以下版本,IE7,opera这些浏览器,对同步和异步请求的函数回调方式是一样的,都是通过onreadystatechange来设置,代码结构如下:

xmlHttp.open("GET","URL.php",false||true);
xmlHttp.onreadystatechange = function ()
{
if (xmlHttp.readyState == 4)
{
if (xmlHttp.readyState == 200)
{
//处理程序
}
}
}
xmlHttp.send(NULL);

而firefox3中,函数回调方式发生了变化。异步请求同上,同步请求如下:

xmlHttp.open("GET","URL.php",false);
xmlHttp.send(NULL);
if(xmlHttp.status==200)
request_function();
function request_function()
{

}
firefox3中Ajax同步的情况下,js会等待请求返回,获取status。不需要onreadystatechange事件处理函数。而异步则需要onreadystatechange事件处理,且值为4再正确处理下面的内容.
奋斗男人 2010-09-28
  • 打赏
  • 举报
回复
xmlHttp.open("GET",linkurl,false);
改成
xmlHttp.open("post",linkurl,false);
antybaby 2010-09-28
  • 打赏
  • 举报
回复
true与false只是选择采用同步方式,还是异步方式.
我的想法是,应该在同步方式(false)下,等有了返回值后才可以进行下一步操作,应该可以获得返回值.
而异步方式(true),它还没有等服务器响应,就开始执行下一步操作了,应该很容易丢失返回值.
一直困惑......
还有一个问题就是为什么不IE下完全没有问题,在Firefox下就不行了...我做了一个AJAX的购物车,也是一样的问题....
还要请net_lover,各路高手指点一二...
hoojo 2010-09-28
  • 打赏
  • 举报
回复
有点问题,是你的变量没有全局
1、
var xmlHttp;//下面的回调用到了这个变量
function GetResult(){
var linkurl="/test/ajax.asp";
if(linkurl==""){return false;}
xmlHttp=GetXmlHttpObject();
if (xmlHttp==null){alert ("您的浏览器不支持AJAX!"); return;}
xmlHttp.open("GET",linkurl,false);
xmlHttp.onreadystatechange = callback;//触发callback事件,以判断信息是否正确
xmlHttp.send(null);
}
function callback(){
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
var rs=xmlHttp.responseText;
//alert(rs);
if (rs!=null){
document.getElementById("content").innerHTML=rs;
}
else{alert("对不起!发生错误了° △ °|||")}
}
}
}

2、
function GetResult(){
var linkurl="/test/ajax.asp";
if(linkurl==""){return false;}
xmlHttp=GetXmlHttpObject();
if (xmlHttp==null){alert ("您的浏览器不支持AJAX!"); return;}
xmlHttp.open("GET",linkurl,false);
xmlHttp.onreadystatechange = function () {//这样写就不会有xmlHttp变量作用域问题
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
var rs=xmlHttp.responseText;
//alert(rs);
if (rs!=null){
document.getElementById("content").innerHTML=rs;
}
else{alert("对不起!发生错误了° △ °|||")}
}
}
}
xmlHttp.send(null);
}

3、

function GetResult(){
var linkurl="/test/ajax.asp";
if(linkurl==""){return false;}
xmlHttp=GetXmlHttpObject();
if (xmlHttp==null){alert ("您的浏览器不支持AJAX!"); return;}
xmlHttp.open("GET",linkurl,false);
xmlHttp.onreadystatechange = function () {
callback(xmlHttp);//传入参数
};//触发callback事件,以判断信息是否正确
xmlHttp.send(null);
}
function callback(xmlHttp){
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
var rs=xmlHttp.responseText;
//alert(rs);
if (rs!=null){
document.getElementById("content").innerHTML=rs;
}
else{alert("对不起!发生错误了° △ °|||")}
}
}
}
孟子E章 2010-09-27
  • 打赏
  • 举报
回复
xmlHttp.open("GET",linkurl,true);
ruichi 2010-09-27
  • 打赏
  • 举报
回复
是不是你简XMLHTTPREQUEST对象不行啊....
antybaby 2010-09-27
  • 打赏
  • 举报
回复
没有问津,自己顶下....
antybaby 2010-09-27
  • 打赏
  • 举报
回复


在处理页中的Response.Expires=0我是用来清除缓存用的,去掉后还是没用?

52,780

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧