You're using IE, which means you need to issue the open() before adding the onreadystatechange handler. Otherwise, open will trigger a call to your handler, and IE's implementation won't have reset the readyState to 0. In either event, you should double-check that the status of the request is 200 before accessing the result. - Godmar On Nov 29, 2007 9:21 AM, Eric Lease Morgan <[log in to unmask]> wrote: > Why doesn't my httpRequest Javascript function return unless I add an > alert? Grrr. > > I am writing my first AJAX-y function called add_tag. This is how it > is suppose to work: > > 1. define a username > 2. create an httpRequest object > 3. define what it is suppose to happen when it gets a response > 4. open a connection to the server > 5. send the request > > When the response it is complete is simply echos the username. I know > the remote CGI script works because the following URL works correctly: > > http://mylibrary.library.nd.edu/demos/tagging/? > cmd=add_tag&username=fkilgour > > My Javascript is below, and it works IF I retain the "alert > ( 'Grrr!' )" line. Once I take the alert out of the picture I get a > Javascript error "xmldoc has no properties". Here's my code: > > > function add_tag() { > > // define username > var username = 'fkilgour'; > > // create an httpRequest > var httpRequest; > if ( window.XMLHttpRequest ) { httpRequest = new XMLHttpRequest(); } > else if ( window.ActiveXObject ) { httpRequest = new ActiveXObject > ( "Microsoft.XMLHTTP" ); } > > // give the httpRequest some characteristics and send it off > httpRequest.onreadystatechange = function() { > > if ( httpRequest.readyState == 4 ) { > > var xmldoc = httpRequest.responseXML; > var root_node = xmldoc.getElementsByTagName( 'root' ).item( 0 ); > alert ( root_node.firstChild.data ); > > } > > }; > > httpRequest.open( 'GET', './index.cgi?cmd=add_tag&username=' + > username, true ); > httpRequest.send( '' ); > alert ( 'Grrr!' ); > > } > > > What am I doing wrong? Why do I seem to need a pause at the end of my > add_tag function? I know the anonymous function -- function() -- is > getting executed because I can insert other httpRequest.readyState > checks into the function and they return. Grrr. > > -- > Eric Lease Morgan > University Libraries of Notre Dame > > (574) 631-8604 >