i apologise if this is something i should be able to look up. all of the terms i wanted were way overloaded..
here is my problem: when i open a page, it fires off a whole series of ajax calls. if i then press Shift+Refresh, all of those ajax calls are being considered errors, and showing their error message dialogs before the entire page itself reloads.
so the error is being triggered by the client - is there anyway i can find out if this is the case so i can ignore it? eg in the xmlhttprequest, or in the ajax function (i am using jquery btw)
Combined version of nisanth074 and Peter V. Mørch answers, that worked for me.
Example:
There are several suggested approaches for detecting this:
Several have suggested the use of a
beforeunload
handler to set a boolean flag so that the error handler can know that the page is being unloaded (See list of related/duplicated posts below). This is great, except that mobile Safari on iOS doesn't support thebeforeunload
event.Sachindra suggested an approach where instead of firing the error function immediately, it got delayed a second in a
setTimeout(..., 1000)
. That way, there is a good chance the page has actually disappeared by the time the error handler gets called. "Good chance" that is. I bet if I have a huge page with e.g. many<input>
s, it could take more than 1 sec to unload, and then perhaps the error handler would fire anyway.I therefore suggest a combination of reliably detecting
beforeunload
support and ifbeforeunload
is not supported (cough iPad/iPhone cough) revert to Sachindra's delay trick.See the full solution with
beforeunload
detection and all in this jsfiddle.It looks like the situation is a little better for jQuery 2.x than for 1.x, but 2.x also seems a little flakey, and so I still find this suggestion prudent.
P.S: There were also suggestions involving testing some fields in the
XHR
/jqXHR
object. (Here and here). I have not come accross a combination that could distinguish between user navigation and restarting the webserver during a long-running AJAX call, and I have therefore not found this approach useful to me.This is really also an answer to these related/duplicated Stack Overflow questions:
and these posts outside of Stack Overflow:
[this is an edit from the previous answer, which had outstanding questions that I have since resolved]
jQuery throws the error event when the user navigates away from the page either by refreshing, clicking a link, or changing the URL in the browser. You can detect these types of errors by by implementing an error handler for the ajax call, and inspecting the xmlHttpRequest object:
The above techniques does not work for a periodically refreshing page (for example every half seconds). I have figured out that the error caused by refreshing the page can be avoided using delaying the error handling process by a small amount of time.
Example:
In addition to that
event can be used for less frequently refreshing ajax calls.