diff --git a/src/ajax/xhr.js b/src/ajax/xhr.js index 33dafb01d..4a31171ac 100644 --- a/src/ajax/xhr.js +++ b/src/ajax/xhr.js @@ -75,7 +75,8 @@ jQuery.ajaxTransport( function( options ) { return function() { if ( callback ) { callback = errorCallback = xhr.onload = - xhr.onerror = xhr.onabort = xhr.onreadystatechange = null; + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; if ( type === "abort" ) { xhr.abort(); @@ -115,7 +116,7 @@ jQuery.ajaxTransport( function( options ) { // Listen to events xhr.onload = callback(); - errorCallback = xhr.onerror = callback( "error" ); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); // Support: IE 9 only // Use onreadystatechange to replace onabort diff --git a/test/unit/ajax.js b/test/unit/ajax.js index 07ff40783..4dc7b9d3a 100644 --- a/test/unit/ajax.js +++ b/test/unit/ajax.js @@ -527,6 +527,23 @@ QUnit.module( "ajax", { }; } ); + ajaxTest( "jQuery.ajax() - native timeout", 2, function( assert ) { + return { + url: url( "data/name.php?wait=1" ), + xhr: function() { + var xhr = new window.XMLHttpRequest(); + xhr.timeout = 1; + return xhr; + }, + error: function( xhr, msg ) { + assert.strictEqual( msg, "error", "Native timeout triggers error callback" ); + }, + complete: function() { + assert.ok( true, "complete" ); + } + }; + } ); + ajaxTest( "jQuery.ajax() - events with context", 12, function( assert ) { var context = document.createElement( "div" );