Code Newbie
News     Forums     Search     Members     Sign Up    

My Code Newbie
Username

Password

Articles/Snippets
ASP Classic
ASP.NET
C
C#
C++
HTML / CSS
Java
Javascript
Linux / BSD
Perl
PHP
Python
Ruby
SQL
VB 6
VB.NET

C.N. Friends
  Planet Rome

Link to Us!
Code Newbie
  Code Newbie
    forums
Go Back   Code Forums > Application and Web Development > HTML, XML, Javascript, AJAX
User Name
Password

Reply
 
LinkBack Thread Tools Display Modes
Old 08-01-2007, 01:43 PM   #1 (permalink)
Technocrat
Recruit
 
Technocrat's Avatar
 
Join Date: Aug 2007
Posts: 1
Technocrat is on a distinguished road
Ajax seems to kill IE

I have a simple 2 way ajax chat system. Basically it's to allow someone to have 1 on 1 conversations with multiple people. It works fine in FF and Opera but for some reason in IE after a period of time, about 20-30 minutes, IE will stop loading the page. You can't even browse to the page any more. The only way to fix the issue is to restart IE.

I can't figure out why. It's like the pipe I make to the server do not close and keep recreating themselves over and over until IE fails.

Code:
var updateInterval = 1000; var users_content; var chat_text; var chat_content; var buttons; var xmlHttpGetUsers = createXmlHttpRequestObject(); var xmlHttpGetChats = createXmlHttpRequestObject(); var xmlHttpGetButtons = createXmlHttpRequestObject(); var xmlHttpGetSendMessage = createXmlHttpRequestObject(); var timer_chats; var isDown = false; function createXmlHttpRequestObject() { // will store the reference to the XMLHttpRequest object var xmlHttp; // this should work for all browsers except IE6 and older try { // try to create XMLHttpRequest object xmlHttp = new XMLHttpRequest(); } catch(e) { // assume IE6 or older var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0", "MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"); // try every prog id until one works for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++) { try { // try to create XMLHttpRequest object xmlHttp = new ActiveXObject(XmlHttpVersions[i]); } catch (e) {} } } // return the created object or display an error message if (!xmlHttp) { alert("Error creating the XMLHttpRequest object."); } else { return xmlHttp; } } /*=== Users ====*/ function requestUsers() { //Random number of IE var ran_number = Math.random()*5; //URL to go to var url = 'get_users.php?my='+my+'&type='+u_type+'&get_users=1&trash='+ran_number; if(xmlHttpGetUsers) { try { // don't start another server operation if such an operation // is already in progress if (xmlHttpGetUsers.readyState == 4 || xmlHttpGetUsers.readyState == 0) { // call the server page to execute the server-side operation xmlHttpGetUsers.open("GET", url, true); xmlHttpGetUsers.onreadystatechange = handleReceivingUsers; xmlHttpGetUsers.send(null); } else { // we will check again for new users setTimeout("requestUsers();", updateInterval); } } catch(e) { displayError(e.toString()); } } } function handleReceivingUsers() { // continue if the process is completed if (xmlHttpGetUsers.readyState == 4) { // continue only if HTTP status is "OK" if (xmlHttpGetUsers.status == 200) { try { // process the server's response readUsers(); } catch(e) { // display the error message displayError(e.toString()); } } else { // display the error message displayError(xmlHttpGetUsers.statusText); } } } function readUsers() { // retrieve the server's response var response = xmlHttpGetUsers.responseText; //Clear the users users_content.innerHTML = ''; //If there is an error if (response.indexOf("ERRNO") >= 0 || response.indexOf("error:") >= 0 ) displayError('Sever Error '+response); //If there is no data if (response.length == 0) { setTimeout("requestUsers();", updateInterval); return; } //Set the users HTML to the response users_content.innerHTML = response; //Reset the timer setTimeout("requestUsers();", updateInterval); } /*=== Chats ===*/ function requestChats() { //Random number of IE var ran_number = Math.random()*5; //URL to go to var url = 'chat.php?last_chat='+last_chat+'&sid='+chat_id+'&type='+u_type+'&my='+my+'&trash='+ran_number; if(xmlHttpGetChats) { try { // don't start another server operation if such an operation // is already in progress if (xmlHttpGetChats.readyState == 4 || xmlHttpGetChats.readyState == 0) { // call the server page to execute the server-side operation xmlHttpGetChats.open("GET", url, true); xmlHttpGetChats.onreadystatechange = handleReceivingChats; xmlHttpGetChats.send(null); } else { // we will check again for new messages timer_chats = setTimeout("requestChats();", updateInterval); } } catch(e) { displayError(e.toString()); } } } function handleReceivingChats() { // continue if the process is completed if (xmlHttpGetChats.readyState == 4) { // continue only if HTTP status is "OK" if (xmlHttpGetChats.status == 200) { try { // process the server's response readChats(); } catch(e) { // display the error message displayError(e.toString()); } } else { // display the error message displayError(xmlHttpGetChats.statusText); } } } function readChats() { // retrieve the server's response var response = xmlHttpGetChats.responseText; //Split the response var ret = new Array(2); ret = get_last_chat(response); response = ret[0]; last_chat = ret[1]; if (response.indexOf("ERRNO") >= 0 || response.indexOf("error:") >= 0 ) displayError('Sever Error '+response); if (response.length <= 1) { timer_chats = setTimeout("requestChats();", updateInterval); return; } chat_content.innerHTML = chat_content.innerHTML + response; chat_content.scrollTop = chat_content.scrollHeight; timer_chats = setTimeout("requestChats();", updateInterval); } /*=== Send Chat ===*/ function send_chat_text() { //Random number of IE var ran_number = Math.random()*5; //URL to go to //We encode it in base 64 just to make sure that nothing gets lost in translation var url = 'chat.php?my='+my+'&type='+u_type+'&text='+ encode(chat_text.value) +'&chat_id=' +chat_id+'&trash='+ran_number; //Clear the text area chat_text.value =''; chat_text.focus(); //Send the command if(xmlHttpGetSendMessage) { try { // don't start another server operation if such an operation // is already in progress if (xmlHttpGetSendMessage.readyState == 4 || xmlHttpGetSendMessage.readyState == 0) { // call the server page to execute the server-side operation xmlHttpGetSendMessage.open("GET", url, true); xmlHttpGetSendMessage.send(null); } } catch(e) { displayError(e.toString()); } } } /*=== Buttons ===*/ function requestButtons() { var ran_number = Math.random()*10; var url = 'get_buttons.php?sid='+chat_id+'&my='+my+'&type='+u_type+'&trash='+ran_number; // only continue if xmlHttpGetMessages isn't void if(xmlHttpGetButtons) { try { // don't start another server operation if such an operation // is already in progress if (xmlHttpGetButtons.readyState == 4 || xmlHttpGetButtons.readyState == 0) { // call the server page to execute the server-side operation xmlHttpGetButtons.open("GET", url, true); xmlHttpGetButtons.onreadystatechange = handleReceivingButtons; xmlHttpGetButtons.send(null); } } catch(e) { displayError(e.toString()); } } } function handleReceivingButtons() { // continue if the process is completed if (xmlHttpGetButtons.readyState == 4) { // continue only if HTTP status is "OK" if (xmlHttpGetButtons.status == 200) { try { // process the server's response readButtons(); } catch(e) { // display the error message displayError(e.toString()); } } else { // display the error message displayError(xmlHttpGetButtons.statusText); } } } function readButtons() { // retrieve the server's response var response = xmlHttpGetButtons.responseText; if (response.indexOf("ERRNO") >= 0 || response.indexOf("error:") >= 0 ) displayError('Sever Error '+response); if (response.length == 0) { return; } buttons.innerHTML = response; } /*=== Other Functions ===*/ // function that displays an error message function displayError(message) { alert("Error accessing the server! "+ "\r\n" + message); } function get_last_chat(Request) { var ret = new Array(2); loc = Request.indexOf('<last_chat>'); loc2 = Request.indexOf('</last_chat>'); if ((loc-1) <= 0) { ret[0] = ''; } else { ret[0] = Request.substring(0, loc-1); } ret[1] = Request.substring(loc+11, loc2); return ret; } function keydown(e) { var characterCode; //literal character code will be stored in this variable e = (!e) ? window.event : e; characterCode = (e.charCode) ? e.charCode : ((e.keyCode) ? e.keyCode : ((e.which) ? e.which : 0)); //If Shift if (characterCode == 16) { isDown = true; } //If CTRL if (characterCode == 17) { isDown = true; } } function checkEnter(e){ //e is event object passed from function invocation var characterCode; //literal character code will be stored in this variable e = (!e) ? window.event : e; characterCode = (e.charCode) ? e.charCode : ((e.keyCode) ? e.keyCode : ((e.which) ? e.which : 0)); if(characterCode == 13 && (isDown == null || !isDown)){ //if generated character code is equal to ascii 13 (if enter key) send_chat_text(); //submit the form return false; } else { isDown = false; return true; } } function change_chat(chatid) { clearTimeout(timer_chats); //Add the chat just sent chat_content.innerHTML = ''; //Set focus back to it chat_text.focus(); chat_id = chatid; last_chat = 0; requestButtons(); requestChats(); } function loader() { users_content = xGetElementById("users"); chat_text = xGetElementById("chat_text"); chat_content = xGetElementById("chat_content"); buttons = xGetElementById("chat_buttons"); requestUsers(); requestChats(); chat_text.focus(); } if (window.addEventListener) { window.addEventListener("load", loader, false); } else if (window.attachEvent) { window.attachEvent("onload", loader); }
Any ideas?
__________________
Technocrat is offline   Reply With Quote
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Ajax Application that saves state ... hc69 HTML, XML, Javascript, AJAX 1 04-03-2007 12:02 AM
AJAX newbie needs help with form validation! metazai HTML, XML, Javascript, AJAX 5 12-11-2006 05:58 AM
AJAX Tutorial? Redline HTML, XML, Javascript, AJAX 3 06-29-2006 04:18 PM
Filling out default info on form via Ajax wzeller HTML, XML, Javascript, AJAX 5 03-05-2006 05:26 PM
AJAX n00b (Pretty involved issue, here!) l33t_1-1axx0r HTML, XML, Javascript, AJAX 4 02-23-2006 09:35 AM


All times are GMT -8. The time now is 09:35 PM.


Powered by vBulletin Version 3.6.2
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.0.0 RC8





Copyright © 2000-2006, Milano Interactive
Web Hosting provided by Portal 360 Web Hosting
Open Circle