mirror of
https://github.com/jquery/jquery.git
synced 2025-01-10 18:24:24 +00:00
Fix #14379: AJAX requests on unload
This commit is contained in:
parent
ebabb33411
commit
f9d41ac641
@ -18,18 +18,16 @@ var xhrSupported = jQuery.ajaxSettings.xhr(),
|
|||||||
// #1450: sometimes IE returns 1223 when it should be 204
|
// #1450: sometimes IE returns 1223 when it should be 204
|
||||||
1223: 204
|
1223: 204
|
||||||
},
|
},
|
||||||
// Support: IE9
|
|
||||||
// We need to keep track of outbound xhr and abort them manually
|
|
||||||
// because IE is not smart enough to do it all by itself
|
|
||||||
xhrId = 0,
|
xhrId = 0,
|
||||||
xhrCallbacks = {};
|
xhrCallbacks = {};
|
||||||
|
|
||||||
|
// Support: IE9
|
||||||
|
// Open requests must be manually aborted on unload (#5280)
|
||||||
if ( window.ActiveXObject ) {
|
if ( window.ActiveXObject ) {
|
||||||
jQuery( window ).on( "unload", function() {
|
jQuery( window ).on( "unload", function() {
|
||||||
for ( var key in xhrCallbacks ) {
|
for ( var key in xhrCallbacks ) {
|
||||||
xhrCallbacks[ key ]();
|
xhrCallbacks[ key ]();
|
||||||
}
|
}
|
||||||
xhrCallbacks = undefined;
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
30
test/data/ajax/onunload.html
Normal file
30
test/data/ajax/onunload.html
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
|
||||||
|
<title>onunload ajax requests (#14379)</title>
|
||||||
|
<script src="../../jquery.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<form id="navigate" action="about:blank"></form>
|
||||||
|
<script>
|
||||||
|
jQuery( window ).on( "unload", function() {
|
||||||
|
var ajaxStatus;
|
||||||
|
jQuery.ajax({
|
||||||
|
url: "../name.html",
|
||||||
|
async: false,
|
||||||
|
complete: function( xhr, status ) {
|
||||||
|
ajaxStatus = status;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
parent.iframeCallback( ajaxStatus );
|
||||||
|
});
|
||||||
|
|
||||||
|
jQuery(function() {
|
||||||
|
setTimeout(function() {
|
||||||
|
document.getElementById( "navigate" ).submit();
|
||||||
|
}, 0 );
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -1522,6 +1522,11 @@ module( "ajax", {
|
|||||||
}
|
}
|
||||||
} );
|
} );
|
||||||
|
|
||||||
|
testIframeWithCallback( "#14379 - jQuery.ajax() on unload", "ajax/onunload.html", function( status ) {
|
||||||
|
expect( 1 );
|
||||||
|
strictEqual( status, "success", "Request completed" );
|
||||||
|
});
|
||||||
|
|
||||||
//----------- jQuery.ajaxPrefilter()
|
//----------- jQuery.ajaxPrefilter()
|
||||||
|
|
||||||
ajaxTest( "jQuery.ajaxPrefilter() - abort", 1, {
|
ajaxTest( "jQuery.ajaxPrefilter() - abort", 1, {
|
||||||
|
Loading…
Reference in New Issue
Block a user