2009-08-04 7 views
1

私はFireFox、chrome、IE8でうまく動作しますが、IE6とIE7では動作しません。私はIE6と7以外の他のブラウザでコードを実行すると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"; 
     } 
    } 
} 

が出力から始まるすべてのアラートボックスを私に示しています - ログイン() に参入 - 入力した状態が変更ログイン - GetEmailIdを入力しました() - 国家はログイン2

を変更し、http://server.com/profile.html

に、ウィンドウの位置変更入力しますが、私はIE 6または7に同じことを実行すると、コードがstatechangedLogin2()に行き、これだけ警告しません。私はここに来るです:

  • 入力したログインを()
  • 入力した国はGetEmailIdを入力したログイン
  • 変更()

私はこの問題が発生している理由を把握することができません。なぜそれが起こっているのですか、私は何を変えなければなりませんか?このプロジェクトはIE8を含む他のブラウザでも問題なく動作しています。

私のこの問題を理解するのに役立つ人がいますか?

+0

ある種のAJAXライブラリを使用していないために何らかの理由があります、jQueryのように?また、コードセクションをコード(101010ボタン)としてマークしてください。 –

答えて

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 N 7に絶対に正常に動作します... :)

ベストZeeshan

2

フォーマットされていないので、コードを読みにくいですが、xmlhttpをxmlhttpに置き換えずにグローバル変数に変換していると思います。

問題

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

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

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

を読み、パラメータを受け入れるようにstatechangedLoginし、Login2のためのあなたの機能を変更するには、あなたのxmlhttp.onreadystatechangeを変更してみてください現在のリクエストを誤って上書きしているxmlhttp変数が終了する前にそれらのイベントが発生しないようにすることができます。関数ごとにxmlhttpをローカル変数にすることで、それらの関数を複数回呼び出すことができ、互いに上書きまたは停止することはありません。

+0

この解決法は機能しませんでした。 –

+0

はい、私のxmlhttpはグローバル変数です。 IE6と7でコードが動作しないことが問題だと思いますか? –

+0

これは暗闇の中での一発ですが、2番目の方法の名前を変更して番号を削除してみてください。正直なところ、数字がIE6/7のタイムフレームで有効なJavaScriptかどうかはわかりません。 (例えば、statechangedLoginTwo();に変更してください) – Joshua

関連する問題