Тот же Ajax не работает в IE более одного раза - PullRequest
1 голос
/ 07 августа 2009

на моей веб-странице, когда пользователь нажимает кнопку «забыл пароль», я спрашиваю электронную почту, ключ безопасности и т. Д., Когда пользователь нажимает кнопку «sendmail», я отправляю электронную почту, ключ безопасности и т. Д. Функции ajax с именем «sendmail» (par1, par2, par3) «[Код ниже]. Пользователь предоставляет существующий mailid, securitykey ..., rtstr [1] установлен в 1 [один]. Таким образом, «Почта успешно отправлена» была отображена. Но если пользователь снова введет информацию [без обновления страницы] и нажмет кнопку sendmail, в IE это не сработает. Но он отлично работает в Firefox.

var xmlhttp1;
xmlhttp1 = GetXmlHttpObject();
function sendmail(Mailforpwd, Secquestion, Secanswer) {
  if (xmlhttp1 == null) {
    alert("Browser does not support HTTP Request");
    return;
  }
  var url = "SendEmail.php";
  url = url + "?Email=" + Mailforpwd;
  url = url + "&Squestion=" + Secquestion;
  url = url + "&Sanswer=" + Secanswer;
  xmlhttp1.onreadystatechange = stateChanged;
  xmlhttp1.open("GET", url, true);
  xmlhttp1.send(null);
  function stateChanged() {
    if (xmlhttp1.readyState == 4) {
      var Result = xmlhttp1.responseText;
      rtstr = Result.split('#');
      //alert(xmlhttp1.responseText);
      //alert(rtstr[0]);
      //alert(rtstr[0]);
      if (rtstr[0] == 1) {
        document.getElementById("Errorcredentials").innerHTML = "Mail send successfully";
      }
      else if (rtstr[1] == 0) {
        //alert(document.getElementById("Errorcredentials").innerHTML);
        document.getElementById("Errorcredentials").innerHTML = "Please provide Exist information";
      }
      else {
        document.getElementById("Errorcredentials").innerHTML = "There is a problem in sending mail, please try after sometime";
      }
    }
  }
}

function GetXmlHttpObject() {
  if (window.XMLHttpRequest) {
    // code for IE7+, Firefox, Chrome, Opera, Safari
    return new XMLHttpRequest();
  }
  if (window.ActiveXObject) {
    // code for IE6, IE5
    return new ActiveXObject("Microsoft.XMLHTTP");
  }
  return null;
}

Здесь моя проблема во второй раз, когда функция stateChanged () не была вызвана, если я поместил предупреждение в эту функцию, при первом отображении окна предупреждения, но в следующий раз не будет. Это моя проблема. SendMail.php вызывался каждый раз.

Ответы [ 4 ]

4 голосов
/ 07 августа 2009

Всякий раз, когда у меня возникает эта проблема, это происходит потому, что IE кеширует ваш AJAX-запрос. Лучший способ избежать этого - каждый раз добавлять случайное число в качестве ключа в строку запроса.

url = url + "&rand=" + Math.random();
3 голосов
/ 07 августа 2009

Или, что еще лучше, поскольку ваш AJAX-запрос вызывает какие-либо действия на стороне сервера, почему бы вам не использовать HTTP POST вместо GET?

xmlhttp1.open ("POST", url, true);

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

Это проблема кеширования. Добавьте текущую дату к вашему URL, чтобы сделать его уникальным.

url = url + "&rand=" + (new Date());
0 голосов
/ 26 марта 2010

просто поменяйте местами эти строки в вашем коде.

xmlhttp1.onreadystatechange = stateChanged; 
xmlhttp1.open("GET", url, true); 

после исправления выглядит как

xmlhttp1.open("GET", url, true); 
xmlhttp1.onreadystatechange = stateChanged; 

Вот и все !!
скайпайд: сатнам.ханна

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