diff --git a/lib/OpenLayers/Ajax.js b/lib/OpenLayers/Ajax.js index c86f8eaeb8..28ff35c90e 100644 --- a/lib/OpenLayers/Ajax.js +++ b/lib/OpenLayers/Ajax.js @@ -45,10 +45,16 @@ OpenLayers.nullHandler = function(request) { * uri - {String} URI of source doc * params - {String} Params on get (doesnt seem to work) * caller - {Object} object which gets callbacks - * onComplete - {Function} callback for success - * onFailure - {Function} callback for failure + * onComplete - {Function} Optional callback for success. The callback + * will be called with this set to caller and will receive the request + * object as an argument. + * onFailure - {Function} Optional callback for failure. In the event of + * a failure, the callback will be called with this set to caller and will + * receive the request object as an argument. * - * Both callbacks optional (though silly) + * Returns: + * {OpenLayers.Ajax.Request} The request object. To abort loading, call + * request.transport.abort(); */ OpenLayers.loadURL = function(uri, params, caller, onComplete, onFailure) { @@ -64,13 +70,15 @@ OpenLayers.loadURL = function(uri, params, caller, : OpenLayers.nullHandler; // from prototype.js - new OpenLayers.Ajax.Request(uri, - { method: 'get', - parameters: params, - onComplete: success, - onFailure: failure - } - ); + return new OpenLayers.Ajax.Request( + uri, + { + method: 'get', + parameters: params, + onComplete: success, + onFailure: failure + } + ); }; /** diff --git a/lib/OpenLayers/Tile/WFS.js b/lib/OpenLayers/Tile/WFS.js index 844b97a890..0fc8b6e48f 100644 --- a/lib/OpenLayers/Tile/WFS.js +++ b/lib/OpenLayers/Tile/WFS.js @@ -28,6 +28,12 @@ OpenLayers.Tile.WFS = OpenLayers.Class(OpenLayers.Tile, { */ url: null, + /** + * Property: request + * {OpenLayers.Ajax.Request} + */ + request: null, + /** TBD 3.0 - reorder the parameters to the init function to put URL * as last, so we can continue to call tile.initialize() * without changing the arguments. @@ -57,6 +63,9 @@ OpenLayers.Tile.WFS = OpenLayers.Class(OpenLayers.Tile, { this.destroyAllFeatures(); this.features = null; this.url = null; + if(this.request) { + this.request.transport.abort(); + } }, /** @@ -97,7 +106,7 @@ OpenLayers.Tile.WFS = OpenLayers.Class(OpenLayers.Tile, { * failure - {function} */ loadFeaturesForRegion:function(success, failure) { - OpenLayers.loadURL(this.url, null, this, success); + this.request = OpenLayers.loadURL(this.url, null, this, success); }, /** diff --git a/tests/Tile/test_WFS.html b/tests/Tile/test_WFS.html index c112bb5f25..034c7adcdf 100644 --- a/tests/Tile/test_WFS.html +++ b/tests/Tile/test_WFS.html @@ -42,7 +42,7 @@ } function test_99_Tile_WFS_destroy(t) { - t.plan( 6 ); + t.plan(8); var layer = {}; // bogus layer var position = new OpenLayers.Pixel(10,20); @@ -56,14 +56,28 @@ }; + var _gAbort = false; + tile.request = { + transport: { + abort: function() { + _gAbort = true; + } + } + } + + tile.destroy(); t.ok(tile.layer == null, "tile.layer set to null"); t.ok(tile.bounds == null, "tile.bounds set to null"); t.ok(tile.size == null, "tile.size set to null"); t.ok(tile.position == null, "tile.position set to null"); + t.ok(_gAbort, "request transport is aborted"); t.ok(tile.events == null, "tile.events set to null"); + + tile.requestSuccess({'requestText': ''}); + t.ok(true, "Didn't fail after calling requestSuccess on destroyed tile."); }