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
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

Bookmarks

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

BB 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 02:41 PM.


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





Copyright © 2000-2008, Milano Interactive
Web Hosting provided by Portal 360 Web Hosting