From de1fa2b9739e6e97c423e6dc6da889905a8e555b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bartosz=20Dziewo=C5=84ski?= Date: Wed, 21 Oct 2015 00:50:20 +0200 Subject: [PATCH] mediawiki.api: Don't hold references to finished requests forever Follow-up to Ie614b05fbfbddca38ea201e90053bebdd58da949. Also removed a TODO comment which no longers makes sense. (We can't share API objects because users could abort each others' requests.) Change-Id: I106139d6e463d7e5e3473035835eb74b18829b87 --- resources/src/mediawiki/api.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/resources/src/mediawiki/api.js b/resources/src/mediawiki/api.js index 481bd89bda..5f82b18827 100644 --- a/resources/src/mediawiki/api.js +++ b/resources/src/mediawiki/api.js @@ -67,7 +67,6 @@ * each individual request by passing them to #get or #post (or directly #ajax) later on. */ mw.Api = function ( options ) { - // TODO: Share API objects with exact same config. options = options || {}; // Force a string if we got a mw.Uri object @@ -90,7 +89,9 @@ */ abort: function () { $.each( this.requests, function ( index, request ) { - request.abort(); + if ( request ) { + request.abort(); + } } ); }, @@ -150,7 +151,8 @@ * Fail: Error code */ ajax: function ( parameters, ajaxOptions ) { - var token, + var token, requestIndex, + api = this, apiDeferred = $.Deferred(), xhr, key, formData; @@ -231,7 +233,11 @@ } } ); + requestIndex = this.requests.length; this.requests.push( xhr ); + xhr.always( function () { + api.requests[ requestIndex ] = null; + } ); // Return the Promise return apiDeferred.promise( { abort: xhr.abort } ).fail( function ( code, details ) { if ( !( code === 'http' && details && details.textStatus === 'abort' ) ) { -- 2.20.1