Показать сообщение отдельно
Старый 21.02.2015, 08:38
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 3  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
К примеру вот это на сервере, в файле call.php (он дальше указан в классе as3):

PHP код:
$method $_POST['method']; // получаем название переданного метода

if ($method == "getSomeData") {
    echo 
"reply=someData"


А так выглядит класс в as3, который получает данные с сервера
Код AS3:
package  {
	import flash.events.Event;
	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 {
 
		public static const HOST:		String 		= "http://server.com/";
		public static const SCRIPT:		String 		= "call.php";
 
		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;
			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);
			}
		}
	}
}
Используется так:
Код AS3:
var packet:Packet = new Packet("getSomeData", onReply); // передаем название метода, который нужно вызвать, и обработчик ответа
 
function onReply(params:Object):void {
    trace(params.reply);
}
Собственно, можно примерно так. Естественно это упрощенный вариант, без каких-либо намеков на безопасность