2009-08-04 75 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