2009-08-07 5 views
1

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

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 вызывался каждый раз.

+0

Похоже на то, что сказал @Jason. 'url = url + '? rnd =' + Math.random();' – Lijo

ответ

4

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

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

Спасибо .. Хорошее решение для работы IE8. – Lijo

+0

@ Lijo проблем нет. хотя, вы не должны больше поддерживать IE8 :) – Jason

+0

Мне нужно было сделать это как «url = url +»? rnd = '+ Math.random(); ' – Lijo

1

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

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

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

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

-2

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

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

после фиксации выглядит как

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

То оно !!
skypeid: satnam.khanna

+0

Подписи здесь очень плохие. Дополнительную информацию см. В разделе «Вопросы и ответы». – IronMan84