AJAX Issue, работает во всех браузерах, кроме IE - PullRequest
0 голосов
/ 17 июня 2010

Хорошо, этот код работает в Chrome и FF, но не в IE (что и следовало ожидать).Кто-нибудь видит что-то не так с этим кодом, который сделает его бесполезным в IE?

var waittime=400;
chatmsg = document.getElementById("chatmsg");
room = document.getElementById("roomid").value; 
sessid = document.getElementById("sessid").value;
chatmsg.focus()
document.getElementById("chatwindow").innerHTML = "loading...";
document.getElementById("userwindow").innerHTML = "Loading User List...";
var xmlhttp = false;
var xmlhttp2 = false;
var xmlhttp3 = false;
function ajax_read() {
if(window.XMLHttpRequest){
    xmlhttp=new XMLHttpRequest();
    if(xmlhttp.overrideMimeType){
        xmlhttp.overrideMimeType('text/xml');
    }
} else if(window.ActiveXObject){
    try{
        xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
        try{
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        } catch(e){
        }
    }
}
if(!xmlhttp) {
    alert('Giving up :( Cannot create an XMLHTTP instance');
    return false;
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState==4) {
    document.getElementById("chatwindow").innerHTML = xmlhttp.responseText;
    setTimeout("ajax_read()", waittime);
    }
}
xmlhttp.open('GET','methods.php?method=r&room=' + room +'',true);
xmlhttp.send(null);
}
function user_read() {
if(window.XMLHttpRequest){
    xmlhttp3=new XMLHttpRequest();
    if(xmlhttp3.overrideMimeType){
        xmlhttp3.overrideMimeType('text/xml');
    }
} else if(window.ActiveXObject){
    try{
        xmlhttp3=new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
        try{
            xmlhttp3=new ActiveXObject("Microsoft.XMLHTTP");
        } catch(e){
        }
    }
}
if(!xmlhttp3) {
    alert('Giving up :( Cannot create an XMLHTTP instance');
    return false;
}
xmlhttp3.onreadystatechange = function() {
if (xmlhttp3.readyState==4) {
    document.getElementById("userwindow").innerHTML = xmlhttp3.responseText;
    setTimeout("user_read()", 10000);
    }
}
xmlhttp3.open('GET','methods.php?method=u&room=' + room +'',true);
xmlhttp3.send(null);
}
function ajax_write(url){
if(window.XMLHttpRequest){
    xmlhttp2=new XMLHttpRequest();
    if(xmlhttp2.overrideMimeType){
        xmlhttp2.overrideMimeType('text/xml');
    }
} else if(window.ActiveXObject){
    try{
        xmlhttp2=new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
        try{
            xmlhttp2=new ActiveXObject("Microsoft.XMLHTTP");
        } catch(e){
        }
    }
}
if(!xmlhttp2) {
    alert('Giving up :( Cannot create an XMLHTTP instance');
    return false;
}
xmlhttp2.open('GET',url,true);
xmlhttp2.send(null);
}
function submit_msg(){
nick = document.getElementById("chatnick").value;
msg = document.getElementById("chatmsg").value;
document.getElementById("chatmsg").value = "";
ajax_write("methods.php?method=w&m=" + msg + "&n=" + nick + "&room=" + room +    "&sessid=" + sessid + "");
}
function keyup(arg1) { 
if (arg1 == 13) submit_msg(); 
}
var intUpdate = setTimeout("ajax_read()", waittime);
var intUpdate = setTimeout("user_read()", 0);

Ответы [ 3 ]

0 голосов
/ 17 июня 2010

Я собираюсь немного избежать вопроса и предлагаю вам использовать jQuery = P. 90% вашего кода испарится. Например, ваша функция user_read станет:

function user_read() {
  $.ajax({
     type: "GET",
     url: "methods.php",
     data: {method: "u", room: room}
     dataType: "html"
     success: function (data, status, xhr) {
         $("#userwindow").html(data);
         setTimeout(user_read, 10000);
     }
   });
}

Кроме того, jQuery также предназначен для работы во всех браузерах, поэтому у вас больше не должно быть проблем с IE.

0 голосов
/ 17 июня 2010

jQuery лучше всего подойдет для нескольких запросов ajax. Иначе, есть довольно много проблем, которые автоматически решают более продвинутые браузеры, в то время как IE может перестать работать. Несколько пропущенных точек с запятой. У вас также есть 2 intUpdate декларации для 2 разных интервалов в конце. Я также заметил, что «xmlhttp2» не имеет функции onreadystatechange.

Использование такой проверки, как JSLint поможет много.

Я приложил все усилия с вашим кодом. Попробуйте это, это должно привести к ошибкам:

var waittime = 400;
chatmsg = document.getElementById("chatmsg");
room = document.getElementById("roomid").value; 
sessid = document.getElementById("sessid").value;
chatmsg.focus();
document.getElementById("chatwindow").innerHTML = "loading...";
document.getElementById("userwindow").innerHTML = "Loading User List...";
var xmlhttp = false;
var xmlhttp2 = false;
var xmlhttp3 = false;

function ajax_read() {
    if(window.XMLHttpRequest){
    xmlhttp=new XMLHttpRequest();
    if(xmlhttp.overrideMimeType){
        xmlhttp.overrideMimeType('text/xml');
    }
} else if(window.ActiveXObject){
    try{
        xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
        try{
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        } catch(e){
    alert('Giving up :( Cannot create an XMLHTTP instance');
}
    }
}

xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState==4) {
    document.getElementById("chatwindow").innerHTML = xmlhttp.responseText;
    setTimeout(function(){ajax_read();}, waittime);
    }
};
xmlhttp.open('GET','methods.php?method=r&room=' + room +'',true);
xmlhttp.send();
}

function user_read() {
if(window.XMLHttpRequest){
    xmlhttp3=new XMLHttpRequest();
    if(xmlhttp3.overrideMimeType){
        xmlhttp3.overrideMimeType('text/xml');
    }
} else if(window.ActiveXObject){
    try{
        xmlhttp3=new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
        try{
            xmlhttp3=new ActiveXObject("Microsoft.XMLHTTP");
        } catch(e){
    alert('Giving up :( Cannot create an XMLHTTP instance');

        }
    }
}

xmlhttp3.onreadystatechange = function() {
if (xmlhttp3.readyState==4) {
    document.getElementById("userwindow").innerHTML = xmlhttp3.responseText;
    setTimeout(function(){user_read();}, 10000);
    }
};
xmlhttp3.open('GET','methods.php?method=u&room=' + room +'',true);
xmlhttp3.send();
}

function ajax_write(url){
if(window.XMLHttpRequest){
    xmlhttp2=new XMLHttpRequest();
    if(xmlhttp2.overrideMimeType){
        xmlhttp2.overrideMimeType('text/xml');
    }
} else if(window.ActiveXObject){
    try{
        xmlhttp2=new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
        try{
            xmlhttp2=new ActiveXObject("Microsoft.XMLHTTP");
        } catch(e){
    alert('Giving up :( Cannot create an XMLHTTP instance');

        }
    }
}
xmlhttp2.open('GET',url,true);
xmlhttp2.send();
}

function submit_msg(){
nick = document.getElementById("chatnick").value;
msg = document.getElementById("chatmsg").value;
document.getElementById("chatmsg").value = "";
ajax_write("methods.php?method=w&m=" + msg + "&n=" + nick + "&room=" + room +    "&sessid=" + sessid + "");
}

function keyup(arg1) { 
if (arg1 == 13) {submit_msg();}
}

var intUpdate = setTimeout(function(){ajax_read();}, waittime);
user_read();
0 голосов
/ 17 июня 2010

Попробуйте запустить на IE какой-нибудь пример, используя библиотеку jQuery - только для частичного тестирования, браузер в порядке и код содержит ошибку.

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