我有这个代码,它可以在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() - 输入State Changed Login 2
然后窗口位置变为http://server.com/profile.html
但是当我在IE 6或7上运行相同的东西时,代码不会进入statechangedLogin2()
,所以我在这里发出的警告是:
我无法弄清楚为什么会出现这个问题。为什么会这样,我应该改变什么?该项目在其他浏览器上运行得非常好,包括IE8。
有人能帮我解决这个问题。
答案 0 :(得分:2)
很难读取您的代码,因为它没有格式化,但我认为您的问题是您将xmlhttp转换为全局变量而不是传递它(我认为......)。
尝试将xmlhttp.onreadystatechange更改为
xmlhttp.onreadystatechange = function() { statechangedLogin(xmlhttp); };
和
xmlhttp.onreadystatechange = function() { statechangedLogin2(xmlhttp); };
然后更改statechangedLogin和Login2的函数以接受参数
function statechangedLogin(xmlhttp) {
// ... code here
}
问题可能是您在xmlhttp变量完成之前意外覆盖当前请求,这可能导致这些事件无法触发。通过使xmlhttp成为每个函数的局部变量,您可以多次调用这些函数,它们不会相互覆盖或停止。
答案 1 :(得分: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