diff --git a/lib/OpenLayers/Layer/HTTPRequest.js b/lib/OpenLayers/Layer/HTTPRequest.js index 53f68126b5..91830c00e0 100644 --- a/lib/OpenLayers/Layer/HTTPRequest.js +++ b/lib/OpenLayers/Layer/HTTPRequest.js @@ -121,7 +121,15 @@ OpenLayers.Layer.HTTPRequest.prototype = // create a new params hashtable with all the layer params and the // new params together. then convert to string var allParams = OpenLayers.Util.extend(new Object(), this.params); - var allParams = OpenLayers.Util.extend(allParams, newParams); + allParams = OpenLayers.Util.extend(allParams, newParams); + // ignore parameters that are already in the url search string + var urlParams = OpenLayers.Util.upperCaseObject( + OpenLayers.Util.getArgs(url)); + for(var key in allParams) { + if(key.toUpperCase() in urlParams) { + delete allParams[key]; + } + } var paramsString = OpenLayers.Util.getParameterString(allParams); if (paramsString != "") { var lastServerChar = url.charAt(url.length - 1); diff --git a/tests/test_Layer_HTTPRequest.html b/tests/test_Layer_HTTPRequest.html index 92221e3c2e..c18a4b3244 100644 --- a/tests/test_Layer_HTTPRequest.html +++ b/tests/test_Layer_HTTPRequest.html @@ -89,7 +89,7 @@ tParams = { layers: 'basic', format: 'image/png'}; - t.plan( 8 ); + t.plan( 9 ); // without ? tUrl = "http://octo.metacarta.com/cgi-bin/mapserv"; @@ -109,6 +109,12 @@ layer = new OpenLayers.Layer.HTTPRequest(name, tUrl, tParams, null); str = layer.getFullRequestString(); t.eq(str, "http://octo.metacarta.com/cgi-bin/mapserv?param1=5&layers=basic&format=image/png", "getFullRequestString() works for url with ?param1=5"); + + // with ?param1=5& + tUrl = "http://octo.metacarta.com/cgi-bin/mapserv?param1=5&format=image/jpeg"; + layer = new OpenLayers.Layer.HTTPRequest(name, tUrl, tParams, null); + str = layer.getFullRequestString(); + t.eq(str, "http://octo.metacarta.com/cgi-bin/mapserv?param1=5&format=image/jpeg&layers=basic", "getFullRequestString() doesn't override already-existing params in URL"); // with ?param1=5& @@ -116,6 +122,8 @@ layer = new OpenLayers.Layer.HTTPRequest(name, tUrl, tParams, null); str = layer.getFullRequestString(); t.eq(str, "http://octo.metacarta.com/cgi-bin/mapserv?param1=5&layers=basic&format=image/png", "getFullRequestString() works for url with ?param1=5&"); + + // passing in new params layer = new OpenLayers.Layer.HTTPRequest(name, tUrl, tParams, null);