相同的Ajax不会在IE中工作多次

时间:2009-08-07 07:43:59

标签: ajax internet-explorer

我的网页当用户点击忘记密码按钮时我会询问电子邮件,Securitykey等..当用户点击sendmail按钮时,我将电子邮件,安全密钥等发送到名为'sendmail(par1,par2,par3)的ajax函数'[代码在下面]。用户提供现有的mailid,securitykey ...,rtstr [1]设置为1 [one]。因此显示“邮件发送成功”。但是如果用户再次输入信息[没有刷新页面]并单击“发送邮件”按钮,则它在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 个答案:

答案 0 :(得分:4)

每当我遇到此问题时,都是因为IE缓存了您的AJAX请求。避免这种情况的最佳方法是每次在查询字符串中附加一个随机数作为键。

url = url + "&rand=" + Math.random();

答案 1 :(得分:3)

或者,更好的是,由于您的AJAX请求似乎导致某些操作发生在服务器端,为什么不使用HTTP POST而不是GET?

xmlhttp1.open(“POST”,url,true);

答案 2 :(得分:1)

这是一个缓存问题。将当前日期时间附加到您的网址以使其唯一。

url = url + "&rand=" + (new Date());

答案 3 :(得分:-2)

只需在代码中交换这些行。

xmlhttp1.onreadystatechange = stateChanged; 
xmlhttp1.open("GET", url, true); 
修复后的

看起来像

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

就是这样!! skypeid:satnam.khanna