AJAX onreadystatechange function called too many times

B

bgold12

I have a page that calls a javascript function every second using
setInterval():

...
<body onload="setInterval('UpdateMessages(1);', 1000 );">
...

In UpdateMessages(), I create an AJAX XMLHttpRequest object and send
the request (with open() and send()), and I make sure to set the
onreadystatechange function.

However, the onreadystatechange function is called twice the first
second the page is run, where the xmlhttp object readyState variable
is 2 and then 4, and then each of the following seconds it is called 4
times, where the readyState variable is 4, then 4, then 2, and then 4
again. What is going on? I want to be able to execute some code when
the AJAX request is complete (i.e. when the readyState is 4) but it is
then executed 3 times because I'm getting a readyState of 4 three
times! I also checked the status variable of the xmlhttp object, and
it's always 200.

If you want the code, ask. Thanks.
 
T

Thomas 'PointedEars' Lahn

bgold12 said:
I have a page that calls a javascript function every second using
setInterval():

Problem recognized?
... <body onload="setInterval('UpdateMessages(1);', 1000 );"> ^^^^^^^^
...

In UpdateMessages(), I create an AJAX XMLHttpRequest object and send the
request (with open() and send()), and I make sure to set the
onreadystatechange function.

However, the onreadystatechange function is called [...] 4 times, where
the readyState variable is 4, then 4, then 2, and then 4 again. What is
going on?

The same method is called on different XHR objects.
I want to be able to execute some code when the AJAX request is complete
(i.e. when the readyState is 4) but it is then executed 3 times because
I'm getting a readyState of 4 three times! I also checked the status
variable of the xmlhttp object, and it's always 200.

Do not use setInterval() with repeated XHR. Call UpdateMessages(), which
should be updateMessages(), directly, and in the listener call
window.setTimeout() when readyState == 4. Be sure to make an asynchronous
request so that the UA is not blocked in the process. You should be reusing
the created XHR object.

This has been asked here before.
If you want the code, ask. Thanks.

The usual way here is: If you want help, post the minimum of the relevant
code. One call, unless it is to invoke a known method eventually, certainly
does not qualify as such.

<http://jibbering.com/faq/#FAQ2_3>


PointedEars
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,057
Latest member
KetoBeezACVGummies

Latest Threads

Top