2009-08-04 76 views
1

我有这段代码,它在FireFox,Chrome和IE8中工作正常,但它不能在IE6和IE7上工作。在IE6和IE7上正常运行AJAX的问题

function GetXmlHttpObject() { 
    //var xmlHttp = null; 
    try { 
    xmlHttp = new XMLHttpRequest(); 
    } catch (e) { 
    try { 
     xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); 
    } catch (e) { 
     xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    } 
    return xmlHttp; 
} 

function login() 
{ 
    alert("Entered Login()"); 
    var url="http://server.com/ALUauth.php"; 
    xmlhttp.onreadystatechange=statechangedLogin; 
    xmlhttp.open("GET", url, true); 
    xmlhttp.send(null); 
} 

function statechangedLogin() 
{ 
    if(xmlhttp.readyState==4) 
    { 
     alert("Entered State Changed Login"); 
     if (xmlhttp.responseText=="Please <a href=http://server.com/ALUauth.php?login>login</a>") 
     { 
      document.getElementById("ALUauth").innerHTML=xmlhttp.responseText; 
     } 
     else 
     { 
      GetEmailId(); 
     } 

    } 
} 

function GetEmailId() 
{ 
    alert("Entered GetEmailId()"); 
    var url="http://server.com/GetPostEmail.php"; 
    url=url+"&sid="+Math.random(); 
    xmlhttp.onreadystatechange=statechangedLogin2; 
    xmlhttp.open("GET", url, true); 
    xmlhttp.send(null); 
} 

function statechangedLogin2() 
{ 
    if(xmlhttp.readyState==4) 
    { 
     alert("Enter State Changed Login 2"); 
     if(xmlhttp.responseText=="Login again") 
     { 
       window.location="http://server.com/profile.html"; 
     } 
    } 
} 

当我在任何其他浏览器,除了IE6和7上运行的代码的输出显示了我所有的警告框从开始: - 输入的登录() - 进入状态改变登录 - 进入GetEmailId() - 输入状态改变登录2

,然后在窗口位置改变到http://server.com/profile.html

,但是当我在IE 6或7上运行同样的事情,代码不进入statechangedLogin2(),所以只能提醒我来到这里是:

  • 输入的登录()
  • 进入状态改变登录
  • 进入GetEmailId()

我无法弄清楚,为什么这个问题正在发生。为什么会发生,我应该改变什么?该项目在其他浏览器包括IE8上运行得非常好。

有人能帮我解决这个问题。

+0

没有任何理由不使用某种形式的Ajax库,像jQuery?此外,请将您的代码部分标记为代码(101010按钮) – 2009-08-04 14:54:25

回答

1

你好,我很抱歉再次发布我的问题。但我没有得到任何解决方案,所以我试图做到这一点。你对此感到抱歉。

反正我能解决我的老板的帮助的情况。

我所做的是给GetEmailId发挥自己的会话。是这样的:

function GetEmailId() 
{ 
alert("Entered GetEmailId()"); 
xmlhttpTwo=GetXmlHttpObject(); 
var url="http://server.com/GetPostEmail.php"; 
url=url+"&sid="+Math.random(); 
xmlhttpTwo.onreadystatechange=statechangedLogin2; 
xmlhttpTwo.open("GET", url, true); 
xmlhttpTwo.send(null); 
} 

我想这和它的作品精美绝伦的IE 6ñ7 ... :)

最佳Zeeshan

2

很难读你的代码,因为它没有被格式化,但我觉得你的问题是,你打开XMLHTTP成一个全局变量,而不是围绕它传递(我想...)。

试着改变你的xmlhttp.onreadystatechange阅读

xmlhttp.onreadystatechange = function() { statechangedLogin(xmlhttp); }; 

xmlhttp.onreadystatechange = function() { statechangedLogin2(xmlhttp); }; 

,然后改变你的功能statechangedLogin和Login2身份接受参数

function statechangedLogin(xmlhttp) { 
    // ... code here 
} 

问题可能是因为你意外地覆盖了当前的请求xmlhttp变量在完成之前可能导致这些事件不能触发。通过为每个函数创建一个局部变量xmlhttp,您可以多次调用这些函数,并且它们不会相互覆盖或停止。

+0

此解决方案不起作用。 – 2009-08-04 15:05:27