PDA

View Full Version : ajax synchronous request, page refresh and the error



jayapalchandran
12-12-2009, 11:38 AM
Hi,
I have been using asynchronous requests for a long time. so the response was processed in a callback function. I thought of not using async so i made synchronous requests. The reason is that i dont have to have two more lines for checking the status and the onreadystatechange....

my synchronous requests would be like this...


var jax = createAjax(); // this function returns the XMLHTTPRequest object
jax.open('POST',url,false); //here false is to do sync request.
jax.setRequestHeader('Content-Type: application/x-www-form-urlencoded');
jax.send(parameters);
// once the above line is executed the process waits for the response and when it gets the response form the server then the next line is executed.
alert(jax.responseText); // here i process the response text.

so from the code you can understand that there is no need of a callback function and if conditions to check ready state... ...

So there is no problem in the above code. The problem araises here...

if i press the F5 (refresh) key or do a page refresh when the process is waiting for the response i get an (NS ERROR - firefox ( i have not yet checked that in IE browsers) (javascript error) though the process completes successfully. why?

Do we have to check whether the page is navigating away while in synchronous operation and abort the request?

or what could be the reason for the error. This will not happen in async requests because that is also the reason for async...

so i give a sync request and before the response is received if i navigate away or reload the page i get the error.

???

jscheuer1
12-12-2009, 01:12 PM
That's a good question, I really don't know. Though I believe that the async request is the preferred method because the sync request stops script processing (just like an alert does) until it is completed, often an undesirable circumstance. If the async request solves this problem as well, it's worth the few extra lines of code.

jayapalchandran
12-12-2009, 03:22 PM
async request. the familiar one and as i had stated in my first post i am comfortable with that... i just want to know behind the scene aspect.

jscheuer1
12-12-2009, 03:41 PM
Well, the details would depend upon the the details of the error, if any. But most likely it is similar to what I already stated. That would be that the browser is processing the sync request which has priority over other processes. It would be sort of like if you had an alert up on the screen and tried to refresh. Only in that case the browser would simply not allow it because it knows not to, giving you a 'thunk' sound (if default sounds are enabled on your system). With the sync request, the browser doesn't really know what's happening, it's not programmed to, it just knows that it is waiting for a process to complete before it is allowed to do the next thing. Hence the error.