By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
437,712 Members | 2,111 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 437,712 IT Pros & Developers. It's quick & easy.

AJAX onreadystatechange function called too many times

P: n/a
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.
Aug 10 '08 #1
Share this Question
Share on Google+
1 Reply


P: n/a
bgold12 wrote:
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
--
Use any version of Microsoft Frontpage to create your site.
(This won't prevent people from viewing your source, but no one
will want to steal it.)
-- from <http://www.vortex-webdesign.com/help/hidesource.htm>
Aug 10 '08 #2

This discussion thread is closed

Replies have been disabled for this discussion.