Ajax xmlHttpObject.open() call works in Mozilla but not in IE

I have a piece of javascript code for Ajax requests that works great in Mozilla but not in IE.

The main method that will be called is getSpeed()
It seems the error in IE is at the point when I call: xmlHttpObject.open(....
The IE throws "Unknown runtime error"

I'm new at Ajax and not sure what I'm doing wrong. Can someone please advise?

Thanks in advance for all the help.
var xmlHttpObject = getXmlHttpRequestObject();
 
/**
 * Create XMLHttpRequestObject.
 **/
function getXmlHttpRequestObject()
{  
	var xmlHttp;
  	try
   	{    
		alert("// Firefox, Opera 8.0+, Safari");    
		xmlHttp=new XMLHttpRequest();    
	}
  	catch (e)
    	{	alert("// Internet Explorer");    
		try
      		{	      
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");      
		}
    		catch (e)
      		{      
			try
        		{        
				xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e)
        		{        
				alert("Your browser does not support AJAX!");        
				return false;        
			} // end catch
		}   // end catch
	}  // end catch
	
  	alert("xmlHttp:" + xmlHttp);
  	
	return xmlHttp;
} // end function
 
/**
 * Called when the AJAX response is returned
 **/ 
function handleResponse() 
{	
	// Check to make sure our response is ready
	if (xmlHttpObject.readyState == 4) 
	{	
		//alert('responseText:' + xmlHttpObject.responseText);
		document.getElementById('speedResultTable').innerHTML=xmlHttpObject.responseText;
		
		//$('#speedResultTable').flexigrid({height:auto});
	} // end if
} // end function
 
/**
 * Get speed data.
 */
function getSpeed()
{
	alert("startTimeToBeSent: " + startTimeToBeSent + 
			", endTimeToBeSent: " + endTimeToBeSent + 
			", pairIdToBeSent: " + pairIdToBeSent
		);
	document.getElementById('speedResultTable').innerHTML='<tr><td><img src="img/ajax-loader.gif"></td></tr>';
	
	alert("xmlHttpObject:" + xmlHttpObject);
	
	xmlHttpObject.open("GET", 
			'getSpeed.jsp?startTime=' + startTimeToBeSent + 
			'&endTime=' + endTimeToBeSent + 
			'&pairing=' + pairIdToBeSent, true);
					
	
	alert("call handle response");
	
	// This line will be called when we receive our AJAX response.
	xmlHttpObject.onreadystatechange = handleResponse; 		
 
	xmlHttpObject.send(null);	
} // end function

Open in new window

rnicholusAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Hube02Commented:
Attached is the function that I use and I've not had it fail in any testing.
    function createXmlHttpRequestObject() {
      // create new XMLHttpRequest Object
      var xmlHttp == false;
      
      // will store the reference to the XMLHttpRequest object
      // this should work for all browsers except IE6 and older
      try {
        // try to create XMLHttpRequest object
        xmlHttp = new XMLHttpRequest();
      }
      catch(e) {
        // failed to create XMLHttpRequest object
        // 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) {}
          // failed to create object
          // do nothing and try the next
        }
      }
      // return the object
      // returns false if we were unable to create any object
      return xmlHttp;
    }

Open in new window

0
hieloCommented:
copy and paste the following:
var xmlHttpObject = getXmlHttpRequestObject();
 
/**
 * Create XMLHttpRequestObject.
 **/
function getXmlHttpRequestObject()
{  
        var xmlHttp=null;
        try
        {    
                alert("// Firefox, Opera 8.0+, Safari");    
                xmlHttp=new XMLHttpRequest();    
        }
        catch (e)
        {       alert("// Internet Explorer");    
                try
                {             
                        xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");      
                }
                catch (e)
                {      
                        try
                        {        
                                xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
                        }
                        catch (e)
                        {        
                                alert("Your browser does not support AJAX!");        
                                return false;        
                        } // end catch
                }   // end catch
        }  // end catch
        
        alert("xmlHttp:" + xmlHttp);
        
        return xmlHttp;
} // end function
 
/**
 * Called when the AJAX response is returned
 **/ 
function handleResponse() 
{       
        // Check to make sure our response is ready
        if (xmlHttpObject.readyState == 4) 
        {       
                //alert('responseText:' + xmlHttpObject.responseText);
                document.getElementById('speedResultTable').innerHTML=xmlHttpObject.responseText;
                
                //$('#speedResultTable').flexigrid({height:auto});
        } // end if
} // end function
 
/**
 * Get speed data.
 */
function getSpeed()
{
        alert("startTimeToBeSent: " + startTimeToBeSent + 
                        ", endTimeToBeSent: " + endTimeToBeSent + 
                        ", pairIdToBeSent: " + pairIdToBeSent
                );
        document.getElementById('speedResultTable').innerHTML='<tr><td><img src="img/ajax-loader.gif"></td></tr>';
        
        alert("xmlHttpObject:" + xmlHttpObject);
        if(!xmlHttpObject)return false;
	   
        // This line will be called when we receive our AJAX response.
        xmlHttpObject.onreadystatechange = handleResponse;              
 
        xmlHttpObject.open("GET", 
                        'getSpeed.jsp?startTime=' + encodeURIComponent(startTimeToBeSent )+ 
                        '&endTime=' + encodeURIComponent(endTimeToBeSent) + 
                        '&pairing=' + encodeURIComponent(pairIdToBeSent, true));
                                        
        
        alert("call handle response");
        
 
        xmlHttpObject.send(null);       
} // end function

Open in new window

0
rnicholusAuthor Commented:
Here's what I found. It's very weird:

Keep testing for a while and then the "Unknown Runtime Error" happens here:
document.getElementById('speedResultTable').innerHTML='<tr><td><img src="img/ajax-loader.gif"></td></tr>';

Then I tried removing the "tr" and "td":
document.getElementById('speedResultTable').innerHTML='<img src="img/ajax-loader.gif">';
Suddenly the problem disappear.

I put the "tr" and "td" back just out of curiosity. There's no more problem.
I'm confused. =(

0
hieloCommented:
It's possible that the first time you are using document.getElementById('speedResultTable'), there is no DOM object for that table yet, in which case the error you are describing would occur. For example, if you make the ajax call NOW, and 3 seconds later you dynamically insert the table AND the ajax completes before you insert the table, that's a problem. Another possibility is if your page has NOT finished loading and you try to derefence the table before the table's definition -ex:

WRONG:
<script>
var x = document.getElementById('theTable')
</script>
<table id='theTable'>...</table>
 
OK
WRONG:
<table id='theTable'>...</table>
<script>
var x = document.getElementById('theTable')
</script>

Open in new window

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
rnicholusAuthor Commented:
hielo,
thanks for your explanation.
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
AJAX

From novice to tech pro — start learning today.