2010-06-17 5 views
0

Хорошо, этот код работает в Chrome и FF, но не в IE (что и следовало ожидать). Кто-нибудь видит что-то не так с этим кодом, который сделает его бесполезным в IE?Проблема AJAX, работает во всех браузерах, кроме 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); 

ответ

0

Я немного избегу вас и предлагаю использовать 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

Даже это немного многословным для Jquery, вы можете просто сделать функцию user_read() { $ ('# userwindow') нагрузки ('методы.. php ', {' method ':' u ',' room ': room}, function() {setTimeout (user_read, 10000);}); } – mishac

+0

@mishac: ах аккуратный, не знал! im все еще новый для jquery. – Claudiu

+0

Мне нравится аккуратность этого кода, используемого здесь, настолько, что я могу его использовать. Благодарю. – Nik

0

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

0

jQuery будет лучше всего для нескольких запросов ajax. Кроме того, существует довольно много проблем, которые могут быть исправлены более совершенными браузерами, в то время как IE может выйти из строя. Несколько отсутствующих точек с запятой. У вас также есть 2 intUpdate объявления для двух разных интервалов в конце. Я также заметил, что «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

... Ничего себе, спасибо, я действительно искал проверку JS в процессе исправления этого кода. Я бы предпочел не использовать библиотеку jQuery. – Nik

+0

@Nix: могу ли я порекомендовать вам хотя бы написать вспомогательные функции? у вас есть тот же код, вставленный 3 раза, для инициализации объектов 'xmlhttp' – Claudiu

Смежные вопросы