It looks like the answer to this is to examine the jqXHR.status. The XMLHttpRequest spec outlines these steps to set the status:
The status attribute must return the result of running these steps:
If the state is UNSENT or OPENED, return 0 and terminate these steps.
If the error flag is set, return 0 and terminate these steps.
Return the HTTP status code.1
NOTE also:
The error flag indicates some type of network error or request abortion. It is initially unset and is used during the DONE state.
From what I understand therefore, this code check should fix the issue:
if (xhr.status == 0)
alert('error');
1https://web.archive.org/web/20120204040047/http://www.w3.org/TR/XMLHttpRequest/#the-status-attribute