// Support: IE9
// #1450: sometimes IE returns 1223 when it should be 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,
+ xhrCallbacks = {};
+
+if ( window.ActiveXObject ) {
+ jQuery( window ).on( "unload", function() {
+ for( var key in xhrCallbacks ) {
+ xhrCallbacks[ key ]();
+ }
+ xhrCallbacks = undefined;
+ });
+}
+
jQuery.support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
jQuery.support.ajax = xhrSupported = !!xhrSupported;
if ( jQuery.support.cors || xhrSupported && !options.crossDomain ) {
return {
send: function( headers, complete ) {
- var i,
+ var i, id,
xhr = options.xhr();
xhr.open( options.type, options.url, options.async, options.username, options.password );
// Apply custom fields if provided
callback = function( type ) {
return function() {
if ( callback ) {
+ delete xhrCallbacks[ id ];
callback = xhr.onload = xhr.onerror = null;
if ( type === "abort" ) {
xhr.abort();
xhr.onload = callback();
xhr.onerror = callback("error");
// Create the abort callback
- callback = callback("abort");
+ callback = xhrCallbacks[( id = xhrId++ )] = callback("abort");
// Do send the request
// This may raise an exception which is actually
// handled in jQuery.ajax (so no try/catch here)
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<title>Attempt to block tests because of dangling XHR requests (IE)</title>
+<script type="text/javascript" src="../../../dist/jquery.js"></script>
+<script type="text/javascript">
+window.onunload = function() {};
+jQuery(function() {
+ setTimeout(function() {
+ var parent = window.parent;
+ document.write("");
+ parent.iframeCallback();
+ }, 200 );
+ var number = 50;
+ while( number-- ) {
+ jQuery.ajax("../name.php?wait=600");
+ }
+});
+</script>
+</head>
+<body>
+<!-- empty body -->
+</body>
+</html>
//----------- jQuery.ajax()
+ testIframeWithCallback( "XMLHttpRequest - Attempt to block tests because of dangling XHR requests (IE)", "ajax/unreleasedXHR.html", function() {
+ expect( 1 );
+ ok( true, "done" );
+ });
+
ajaxTest( "jQuery.ajax() - success callbacks", 8, {
setup: addGlobalEvents("ajaxStart ajaxStop ajaxSend ajaxComplete ajaxSuccess"),
url: url("data/name.html"),