2009-08-26 8 views
0

ich mit einem Lader arbeite ein Bild von einem WMS (Web Mapping Service) zu beantragen. Alles ist gut und schön mit einer gültigen Anfrage.Trouble With Action Loader Event

Wenn eine schlechte Anforderung an einen WMS gemacht wird, ein Standard-Exception-Dokument (XML) ist in der Regel zurückgegeben. Der Ladevorgang löst jedoch kein Ereignis (insbesondere die Complete- oder IOError-Ereignisse) aus, wenn eine ungültige Anforderung erfolgt.

Hat jemand irgendwelche Vorschläge, wie kann ich Falle etwas, das kein Bild ist, die zurückgegeben werden könnte?

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'); 
} 

Antwort

1

Eine Möglichkeit, Sie in wandelt Ihre Loader auf einem URLLoader aussehen könnte, wie Sie über zu sehen, welche Daten mehr Flexibilität geben, wird tatsächlich angefordert/empfangen.

Die Klasse display.Loader weist einige merkwürdige Macken auf, die das Auslösen bestimmter Ereignisse einfach nicht zulassen, wenn sie versuchen, ein Objekt zu laden, das keine geeignete Eintragsklasse hat (normalerweise eine von display.Sprite abgeleitete Klasse).

Ich denke, die URLLoader von Vorteil sein wird, wie Sie die URLLoaderDataFormat auf BINARY einstellen. Dies wird fangen, was zurückgegeben wird, und speichern Sie es in einem ByteArray-Objekt, das Sie entweder in eine display.Loader über Loader.loadBytes laden kann(), wenn es sich um ein gültiges Bild ist, oder einfach wandeln die URLLoaderData.toString() Ihre XML abrufen Information.

+0

Dies funktionierte perfekt, danke für den Rat. – user163757