[OpenLayers-Users] Overriding url for Vector layer

Adrian Popa adrian_gh.popa at romtelecom.ro
Wed Jul 8 04:19:25 EDT 2009


Hi again,

I managed to find a work-around for the problem - I just create a new 
Protocol.HTTP object and replace the old one. This way, my parameters 
get sent:

locations.protocol = new OpenLayers.Protocol.HTTP({'url' : 
'kml_alarms.pl', 'params' : { 'key2' : 'value2'} });
locations.refresh({force:true});

I don't know if I'm creating a memory leak by deleting the reference to 
the old Protocol.HTTP object instance. I'm not sure if it's referenced 
anywhere else nor if it will be deleted by the garbage collector.
If you have better suggestions, I'm all ears.

Regards,
Adrian

Adrian Popa wrote:
> Hello Andreas,
>
> I've tried your solution, but unfortunately it doesn't send the 
> additional parameters to the script. Here's what I tried in firebug:
>   
>>>> locations.refresh({force: true, params: { 'key' : 'value'}});
>>>>         
> And the layer refreshes, but the only parameter sent is bbox.
>
> Any other ideas?
> Regards,
> Adrian
>
> Andreas Hocevar wrote:
>   
>> Hi,
>>
>> Adrian Popa wrote:
>>     
>>> I'm trying to display a vector layer (feed data as KML) and I'm 
>>> trying to dynamically set some variables that are sent server-side 
>>> for processing.
>>> The layer definition is the following:
>>> locations = new OpenLayers.Layer.Vector("Alarm Locations", {
>>>                         projection: map.displayProjection, 
>>> minResolution: 1, maxResolution: 38,
>>>                         strategies: [new OpenLayers.Strategy.BBOX()],
>>>                         protocol: new OpenLayers.Protocol.HTTP({ 
>>> *url: "kml_locations.pl"*, format: new OpenLayers.Format.KML({ 
>>> extractStyles: true, extractAttributes: true })})});
>>> map.addLayer(locations);
>>> On some event (button pressed) I use a javascript function to replace 
>>> the "url" value from the layer definition with a url similar to: 
>>> "kml_locations.pl?key1=value1&key2=value2". After this I call 
>>> *layer.refresh({force: true});
>>>
>>> *From analysing the traffic to the web server I can see that the 
>>> layer refresh is called on the old url value (kml_locations.pl) even 
>>> if the attribute locations.protocol.url is set to the value I imposed.
>>>
>>> My question is: when the layer is refreshed - which URL is used (is 
>>> there a cached value)? Can this be overwritten? Or do I need to 
>>> create a new Protocol object?
>>>       
>> It is much simpler than you may think. Obviously your url stays the 
>> same (kml_locations.pl), only your params change (key1=value1, 
>> key2=value2). So you do not need to change the url at all. All you 
>> have to do is
>>
>> layer.refresh({
>>    force: true,
>>    params: {
>>        key1: "value1",
>>        key2: "value2"
>>    }
>> });
>>
>> Regards,
>> Andreas.
>>
>>     
>
> _______________________________________________
> Users mailing list
> Users at openlayers.org
> http://openlayers.org/mailman/listinfo/users
>
>   

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/openlayers-users/attachments/20090708/9cff2eed/attachment.html


More information about the Users mailing list