Ajax Callback function not getting called
In a HTML page I was using a global Javascript request object.
<script type="text/javascript"> var request = null; try { request = new XMLHttpRequest(); } catch (trymicrosoft) { try { request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (othermicrosoft) { try { request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (failed) { request = null; } } } ... </script>
The first time I executed my Ajax Javascript to issue a request to the server, the callback function worked ok and callback function was called. Each subsequent request hit the server ok, but the callback function wasn't called again. I didn't see any Javascript errors either. Turned out I had my onreadystatechange
and open
calls in the wrong order. This is how they were:
request.onreadystatechange = updatePage; request.open("GET", url, true); request.send(null);
When I made the following change, it worked.
request.open("GET", url, true); request.onreadystatechange = updatePage; request.send(null);
Another fix was when I had the code to make a request inside a single function and being called before the three request lines, like below. Obviously, this was just hiding the problem though.
<script type="text/javascript"> function createRequest() { try { request = new XMLHttpRequest(); } catch (trymicrosoft) { try { request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (othermicrosoft) { try { request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (failed) { request = null; } } } if (request == null) { alert("Error creating request object!"); } } function doAjaxyThing() { var url = "..."; createRequest(); request.onreadystatechange = updatePage; request.open("GET", url, true); request.send(null); } </script>
Comments