X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;f=src%2Fajax%2Fxhr.js;h=032668f68d7e60228208b3f974600a695b50a1df;hb=98c6c4b2b0afb2754883fc39c5626da3219e81e0;hp=7d714025933ad46c22847c1987e9ca9ffd3cd3c7;hpb=368f2441f64e95fe5dfda318709e795833470903;p=jquery.git diff --git a/src/ajax/xhr.js b/src/ajax/xhr.js index 7d71402..032668f 100644 --- a/src/ajax/xhr.js +++ b/src/ajax/xhr.js @@ -6,6 +6,9 @@ var // Next fake timer id // Callbacks hashtable xhrs = {}, + // XHR pool + xhrPool = [], + // #5280: see end of file xhrUnloadAbortMarker = []; @@ -21,7 +24,7 @@ jQuery.ajax.transport( function( s , determineDataType ) { send: function(headers, complete) { - var xhr = s.xhr(), + var xhr = xhrPool.pop() || s.xhr(), handle; // Open the socket @@ -53,6 +56,8 @@ jQuery.ajax.transport( function( s , determineDataType ) { try { xhr.send( ( s.hasContent && s.data ) || null ); } catch(e) { + // Store back in pool + xhrPool.push( xhr ); complete(0, "error", "" + e); return; } @@ -64,10 +69,12 @@ jQuery.ajax.transport( function( s , determineDataType ) { if ( callback && ( abortStatusText || xhr.readyState === 4 ) ) { // Do not listen anymore + // and Store back in pool if (handle) { xhr.onreadystatechange = jQuery.noop; delete xhrs[ handle ]; handle = undefined; + xhrPool.push( xhr ); } callback = 0;