From 315f20bc9b232c552bda8877a2b608bf273b5cbb Mon Sep 17 00:00:00 2001 From: euzuro Date: Wed, 12 Sep 2007 02:37:09 +0000 Subject: [PATCH] Temporary fix for WFS race condition where a tile is destroy()ed but an associated httprequest has not yet returned. Great report, Pierre G. (Closes #820) git-svn-id: http://svn.openlayers.org/trunk/openlayers@4227 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf --- lib/OpenLayers/Tile/WFS.js | 28 +++++++++++++++++----------- tests/Tile/test_WFS.html | 15 +++++++++++++++ 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/lib/OpenLayers/Tile/WFS.js b/lib/OpenLayers/Tile/WFS.js index f67f0aa76d..285dbe3bdd 100644 --- a/lib/OpenLayers/Tile/WFS.js +++ b/lib/OpenLayers/Tile/WFS.js @@ -103,17 +103,23 @@ OpenLayers.Tile.WFS = OpenLayers.Class(OpenLayers.Tile, { * request - {XMLHttpRequest} */ requestSuccess:function(request) { - var doc = request.responseXML; - - if (!doc || request.fileType!="XML") { - doc = OpenLayers.parseXMLString(request.responseText); - } - if (this.layer.vectorMode) { - var gml = new OpenLayers.Format.GML({extractAttributes: this.layer.options.extractAttributes}); - this.layer.addFeatures(gml.read(doc)); - } else { - var resultFeatures = OpenLayers.Ajax.getElementsByTagNameNS(doc, "http://www.opengis.net/gml","gml", "featureMember"); - this.addResults(resultFeatures); + if (this.features) { + var doc = request.responseXML; + + if (!doc || request.fileType!="XML") { + doc = OpenLayers.parseXMLString(request.responseText); + } + if (this.layer.vectorMode) { + var gml = new OpenLayers.Format.GML({ + 'extractAttributes': this.layer.options.extractAttributes + }); + this.layer.addFeatures(gml.read(doc)); + } else { + var resultFeatures = OpenLayers.Ajax.getElementsByTagNameNS( + doc, "http://www.opengis.net/gml", "gml", "featureMember" + ); + this.addResults(resultFeatures); + } } }, diff --git a/tests/Tile/test_WFS.html b/tests/Tile/test_WFS.html index cc4838f000..c112bb5f25 100644 --- a/tests/Tile/test_WFS.html +++ b/tests/Tile/test_WFS.html @@ -26,6 +26,21 @@ t.ok( tile.events != null, "tile's events intitialized"); } + function test_Tile_WFS_requestSuccess(t) { + t.plan(1); + var layer = {}; // bogus layer + var position = new OpenLayers.Pixel(10,20); + var bounds = new OpenLayers.Bounds(1,2,3,4); + var url = "bobob"; + var size = new OpenLayers.Size(5,6); + + tile = new OpenLayers.Tile.WFS(layer, position, bounds, url, size); + tile.destroy(); + tile.requestSuccess({'requestText': ''}); + t.ok(true, "Didn't fail after calling requestSuccess on destroyed tile."); + + } + function test_99_Tile_WFS_destroy(t) { t.plan( 6 );