Проблема с событиями загрузчика ActionScript - PullRequest
0 голосов
/ 26 августа 2009

Я работаю с загрузчиком, чтобы запросить изображение из WMS (Web Mapping Service). Все хорошо и модно с действительным запросом.

Когда к WMS поступает неверный запрос, обычно возвращается стандартный исключительный документ (XML). Однако загрузчик не запускает никаких событий (в частности, события Complete или IOError), когда сделан неверный запрос.

У кого-нибудь есть предложения, как я могу перехватить что-либо, кроме изображения, которое может быть возвращено?

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

1 Ответ

1 голос
/ 28 августа 2009

Одна из возможностей, на которую вы могли бы обратить внимание, - это преобразовать ваш Loader в URLLoader, чтобы дать вам больше гибкости при просмотре того, какие данные на самом деле запрашиваются / принимаются.

Класс display.Loader имеет некоторые странные причуды, которые просто не позволяют запускать определенные события, если он пытается загрузить объект, у которого нет подходящего класса входа (обычно это класс, производный от display.Sprite).

Я думаю, что URLLoader будет полезен, так как вы можете установить URLLoaderDataFormat в BINARY. Это отловит все, что возвращается, и сохранит его в объекте ByteArray, который можно либо загрузить в display.Loader с помощью Loader.loadBytes (), если это допустимое изображение, либо просто преобразовать URLLoaderData.toString () для получения вашего XML информация.

...