Проблема правильного запуска AJAX в IE6 и IE7 - PullRequest
1 голос
/ 04 августа 2009

У меня есть этот код, который отлично работает в FireFox, Chrome и IE8, но не работает в IE6 и IE7.

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.

Может ли кто-нибудь помочь мне разобраться с моей проблемой.

Ответы [ 2 ]

2 голосов
/ 04 августа 2009

Трудно читать ваш код, поскольку он не отформатирован, но я думаю, что ваша проблема в том, что вы превращаете xmlhttp в глобальную переменную, а не передаете ее (я думаю ...).

Попробуйте изменить xmlhttp.onreadystatechange на

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

и

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

, а затем измените свои функции для StateagedLogin и Login2, чтобы принять параметр

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

Проблема может заключаться в том, что вы случайно перезаписываете текущий запрос в переменной xmlhttp до его завершения, что может привести к тому, что эти события не сработают. Сделав xmlhttp локальной переменной для каждой функции, вы можете вызывать эти функции несколько раз, и они не будут перезаписывать или останавливать друг друга.

1 голос
/ 05 августа 2009

Здравствуйте, я прошу прощения за возможность опубликовать мой вопрос снова. но я не получил никакого решения там, поэтому я попытался сделать это. Я сожалею об этом.

В любом случае мне удалось решить ситуацию с помощью моего босса.

Все, что я сделал, - это назначил функции 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 ...:)

Best Zeeshan

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...