[OpenLayers-Users] I'm stuck trying to decorate OpenLayers.Request.issue

Stephen Woodbridge woodbri at swoodbridge.com
Sat Feb 2 10:42:47 PST 2013


Umberto,

Thank you for the suggestion. I had actually done that before, but was 
looking for a less intrusive way of setting this up.

As it turns out I was close, this is what I finally ended up with:

     function decorateOpenLayersAjax(f) {
        return function() {
          var startT = new Data();
          var answer = f.apply(OpenLayers.Request, arguments);
          try {
            var deltaT = ((new Date()).getTime() -
                          startT.getTime())/1000.0;
            logtime(deltaT);
          }
          finally {
            return answer;
          }
       };
     }

Then this works:

     OpenLayers.Request.issue =
       decorateOpenLayersAjax(OpenLayers.Request.issue);

Its a nice clean what of doing this so you intercept all ajax requests 
independently of how your application is built.

-Steve

On 2/2/2013 3:50 AM, Umberto Nicoletti wrote:
> I would use an event listener instead:
>
> start the timer on complete event
>
> stop andlog  it on success or failure
>
> hth,
> Umberto
>
> On Saturday, February 2, 2013, Stephen Woodbridge wrote:
>
>     Hi All,
>
>     I am trying to add some tracking code to my OpenLayers app so I can
>     track performance of ajax requests. So my plan was to decorate the
>     OpenLayers.Request.issue function to log the time before and after
>     the issue().
>
>     Something like:
>
>     function decorateOpenLayersAjax(f) {
>        var startT = new Data();
>        var answer = f.apply(this, arguments);
>        try {
>          var deltaT = ((new Date()).getTime() - startT.getTime())/1000.0;
>          logtime(deltaT);
>        }
>        finally {
>          return answer;
>        }
>     }
>
>     And then in my init() function:
>
>     OpenLayers.Request.issue =
>     decorateOpenLayersAjax(__OpenLayers.Request.issue);
>
>     My page loads fine, but on the first ajax request I get the error:
>
>     TypeError: a.headers is undefined
>
>     which implies that my decoration is breaking the code in:
>
>     "ol212/lib/OpenLayers/Request.__js" line 165
>
>          issue: function(config) {
>              // apply default config - proxy host may have changed
>              var defaultConfig = OpenLayers.Util.extend(
>                  this.DEFAULT_CONFIG,
>                  {proxy: OpenLayers.ProxyHost}
>              );
>              config = OpenLayers.Util.applyDefaults(__config,
>     defaultConfig);
>
>     It seems that this.DEFAULT_CONFIG no longer points to the original
>     object where it is defined.
>
>     Any ideas on how to do this, or a better way to do this would be
>     appreciated.
>
>     -Steve
>     _________________________________________________
>     Users mailing list
>     Users at lists.osgeo.org
>     http://lists.osgeo.org/__mailman/listinfo/openlayers-__users
>     <http://lists.osgeo.org/mailman/listinfo/openlayers-users>
>



More information about the Users mailing list