![]() |
|
||||||||||
|
|||||
|
Регистрация: Apr 2011
Сообщений: 20
|
Здравствуйте. Возникла следующая задача:есть функция подключения к серверу и функция приема и обработки ответа
private function server_connect(type:Number = 0):void { var loader:URLLoader = new URLLoader(); var request:URLRequest = new URLRequest("сервер"); request.method = URLRequestMethod.POST; var vars:URLVariables = new URLVariables(); vars['type'] = type request.data = vars; loader.load(request); loader.addEventListener(Event.COMPLETE, load) function load(e:Event):void { var str = String(loader.data); if (str == loader.data) { if(str == "0") { error.error() }else { } } } } |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
1. Анонимные функции - зло. Что вам мешаете определить function load в теле класса?
2. Запрос/ответ к серверу - это асинхронная операция, т.е. ваш код не будет ждать ответа, а будет исполняться дальше, соответственно return сделать нельзя. Поэтому функция load должна содержать или вызывать код, в который вы хотели сделать ваш return. |
|
|||||
|
я, для упрощения себе задачи, создал класс, который работает с запросом
package { import flash.events.Event; import flash.events.EventDispatcher; import flash.events.IOErrorEvent; import flash.events.SecurityErrorEvent; import flash.net.URLLoader; import flash.net.URLLoaderDataFormat; import flash.net.URLRequest; import flash.net.URLRequestMethod; import flash.net.URLVariables; public class Packet extends EventDispatcher { public static const HOST: String = "http://server.com/"; public static const SCRIPT: String = "call.php"; public static var PASS: String = "paswordHere"; public static var USER_ID: String = "userId"; private var _callback: Function = null; /** * * @param называние метода, который нужно вызывать на сервере, передается в * POST с ключом method * @param callback метод который вызывается после прихода ответа от сервера * должен принимать один параметр типа Object */ public function Packet(method:String, callback:Function, params:Object = null) { _callback = callback; var loader: URLLoader = new URLLoader(); loader.addEventListener(Event.COMPLETE, onComplete); loader.addEventListener(IOErrorEvent.IO_ERROR, onIOError); loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError); loader.dataFormat = URLLoaderDataFormat.VARIABLES; var vars:URLVariables = new URLVariables(); vars['method'] = method; vars['pass'] = PASS; vars['userId'] = USER_ID; if (params != null) { for (var i:String in params) { vars[i] = params[i]; } } var rand: String = "?" + int(Math.random() * 10000); var request:URLRequest = new URLRequest(Packet.HOST + Packet.SCRIPT + rand); request.method = URLRequestMethod.POST; request.data = vars; trace(request.data.toString()); try { loader.load(request); } catch (e:Error) { trace(e.getStackTrace()); } } private function onSecurityError(e:SecurityErrorEvent):void { e.target.removeEventListener(Event.COMPLETE, onComplete); e.target.removeEventListener(IOErrorEvent.IO_ERROR, onIOError); e.target.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError); } private function onIOError(e:IOErrorEvent):void { e.target.removeEventListener(Event.COMPLETE, onComplete); e.target.removeEventListener(IOErrorEvent.IO_ERROR, onIOError); e.target.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError); trace("INPUT / OUTPUT ERROR"); } private function onComplete(e:Event):void { e.target.removeEventListener(Event.COMPLETE, onComplete); e.target.removeEventListener(IOErrorEvent.IO_ERROR, onIOError); e.target.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError); var data:Object = e.target.data as Object; trace("PACKET DATA:", this, unescape(String(data))); // отображает запрос к серверу if (_callback != null) { _callback.call(null, data); } } } } var packet:Packet = new Packet("someServerMethod", onPacketData); // можно так же передать объект с переменныи. Они прийдут на сервер в запросе POST, в котором ключи и значения буду соответствовать ключам из начениям в переданном объекте function onPacketData(params:Object):void { // вообще, в место Object надо бы URLVariables принимать. Но с объектом тоже прокатывает // здесь можно обрабатывать пришедшие данные } |
|
|||||
|
Регистрация: Apr 2011
Сообщений: 20
|
iNils, спасибо, учту.
caseyryan, спасибо, слямзил) |
![]() |
![]() |
Часовой пояс GMT +4, время: 18:16. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|