. xhr window.onbeforeunload. , . $.ajax():
;(function($) {
var rq = [];
var ajax = $.ajax;
$.ajax = function(settings) {
var complete = settings.complete;
settings.complete = function(xhr) {
if (xhr) {
for (var i = 0, len = rq.length; i < len; ++i) {
if (rq[i] == xhr) {
rq.splice(i, 1);
break;
}
}
}
if (complete) {
complete.apply(this, arguments)
}
}
var r = ajax.apply(this, arguments);
if (r) {
rq.push(r);
}
return r;
};
$(window).bind('beforeunload', function() {
$.each(rq, function(i, xhr) {
try {
xhr.abort();
} catch(e) {
$debug.fail('failed to abort xhr');
}
});
rq = [];
});
})(jQuery);
$debug -