//使用的时候像这个样子
public function sync(xindex:Number,yindex:Number):void
{
addProcessor(IO_SYNC_URL, processorSync, DataEvent.SYNC_RESULT, DataEventError.SYNC_ERROR);
var params:Object = new Object();
params["xi"] = xindex;
params["yi"] = yindex;
executeRequest(IO_SYNC_URL, getRequest(IO_SYNC_URL, params, URLRequestMethod.GET));
}
//这个函数返回带参数的URLRequest
private function getRequest(url:String, params:Object, requestMethod:String="GET"):URLRequest
{
var req:URLRequest = new URLRequest();
req.url = IO_BASE_URL+url+makeGETParamString(params);
req.method = requestMethod;
trace(req.url);
return req;
}
//这里注册事件,以及响应函数;那个serviceLoader、loaderMap是这样定义的
//private var serviceLoader:Dictionary = new Dictionary();
//private var loaderMap:Dictionary = new Dictionary();
private function addProcessor(name:String, dataProcess:Function, resultEventType:String, errorEventType:String):void
{
if (null == serviceLoader[name])
{
var loader:URLLoader=new URLLoader();
loader.addEventListener(Event.COMPLETE, loader_onComplete);
loader.addEventListener(IOErrorEvent.IO_ERROR, loader_onError);
loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loader_onSecurityError);
serviceLoader[name]=loader;
loaderMap[loader]={dataFunc: dataProcess, resultEvent: resultEventType, errorEvent: errorEventType};
}
}
//这里就load了
private function executeRequest(name:String, req:URLRequest):void
{
var urlLoader:URLLoader = serviceLoader[name] as URLLoader;
urlLoader.load(req);
}
//这里是一些响应函数,最后触发定义好的事件
private function loader_onComplete(event:Event):void
{
var loader:URLLoader=event.target as URLLoader;
var processor:Object=loaderMap[loader];
var data:String = loader.data as String;
if(data.toString()=="oauthlost"){
var req:URLRequest = new URLRequest(FLASH_URL);
navigateToURL(req,"_self");
/*var ioError:DataEventError = new DataEventError(processor.errorEvent);
ioError.message = "get map error";
dispatchEvent(ioError);*/
return;
}else{
var e:DataEvent = new DataEvent(processor.resultEvent);
e.result = processor.dataFunc(data);
dispatchEvent(e);
}
}
private function loader_onError(event:IOErrorEvent):void
{
var loader:URLLoader=event.target as URLLoader;
var processor:Object=loaderMap[loader];
var error:DataEventError=new DataEventError(processor.errorEvent);
error.message=event.text;
dispatchEvent(error);
}
private function loader_onSecurityError(event:SecurityErrorEvent):void
{
dispatchEvent(event);
}
private function makeGETParamString(parameters:Object):String
{
var paramStr:String=makeParamsToUrlString(parameters);
if (paramStr.length > 0)
{
paramStr="?" + paramStr + "&r=" + Math.random();
}else{
paramStr="?r=" + Math.random();
}
return paramStr;
}
private function makeParamsToUrlString(params:Object):String
{
var retParams:Array=[];
for (var param:String in params)
{
retParams.push(param + "=" + params[param].toString());
}
retParams.sort();
return retParams.join("&");
}
No comments:
Post a Comment