2009-08-26 5 views
0

Je travaille avec un chargeur pour demander une image à partir d'un WMS (Web Mapping Service). Tout est bien et dandy avec une demande valide.Problème avec les événements Loader ActionScript

Lorsqu'une demande incorrecte est faite à un WMS, un document d'exception standard (XML) est généralement renvoyé. Cependant, le chargeur ne déclenche aucun événement (en particulier les événements Complete ou IOError) lorsqu'une requête incorrecte est effectuée.

Quelqu'un at-il des suggestions sur la façon dont je peux piéger tout ce qui n'est pas une image qui pourrait être retournée?

override protected function loadMapImage(loader:Loader):void 
{ 
// update parameter values 
_params = new URLVariables(); 
_params.request = "GetMap"; 
_params.format = "image/png"; 
_params.version = "1.1.1"; 
_params.layers = this.layers; 
_params.styles = ""; 
_params.transparent = "TRUE"; 
_params.bbox = map.extent.xmin + "," + map.extent.ymin + "," + map.extent.xmax + "," + map.extent.ymax; 
_params.srs = "EPSG:" + map.spatialReference.wkid; 
_params.width = map.width; 
_params.height = map.height; 

_urlRequest = new URLRequest(this.url); 
_urlRequest.data = _params; 

configureListeners(loader.contentLoaderInfo); 

loader.load(_urlRequest); 
} 

private function configureListeners(dispatcher:IEventDispatcher):void 
{ 
//dispatcher.addEventListener(Event.INIT, initHandler); 
//dispatcher.addEventListener(Event.UNLOAD, unloadHandler); 
dispatcher.addEventListener(Event.COMPLETE, completeHandler); 
//dispatcher.addEventListener(Event.OPEN, openHandler); 
//dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler); 
//dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); 
//dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler); 
dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); 
//dispatcher.addEventListener(Event.ACTIVATE, activateHandler); 
//dispatcher.addEventListener(Event.DEACTIVATE, deactivateHandler); 
} 

private function ioErrorHandler(event:IOErrorEvent):void 
{ 
trace('ioErrorHandler event'); 
} 

private function completeHandler(event:Event):void 
{ 
trace('completeHandler event'); 
} 

Répondre

1

Une possibilité que vous pourriez regarder en est la conversion de votre chargeur à un URLLoader, pour vous donner plus de flexibilité au cours de voir quelles données sont effectivement demandé/reçu. La classe display.Loader a des bizarreries étranges qui ne permettent tout simplement pas de déclencher certains événements si elle tente de charger un objet qui n'a pas de classe d'entrée correcte (typiquement une classe dérivée de display.Sprite).

Je pense que l'URLLoader sera bénéfique, car vous pouvez définir l'URLLoaderDataFormat sur BINARY. Cela capture tout ce qui est retourné et le stocke dans un objet ByteArray, que vous pouvez charger dans un display.Loader via Loader.loadBytes() s'il s'agit d'une image valide, ou simplement convertir l'URLLoaderData.toString() pour récupérer votre XML information.

+0

Cela a fonctionné parfaitement, merci pour le conseil. – user163757

Questions connexes