Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.02.2013, 14:06
loigor3 вне форума Посмотреть профиль Отправить личное сообщение для loigor3 Найти все сообщения от loigor3
  № 1  
Ответить с цитированием
loigor3

Регистрация: Apr 2011
Сообщений: 20
По умолчанию return после ответа сервера

Здравствуйте. Возникла следующая задача:есть функция подключения к серверу и функция приема и обработки ответа
Код AS1/AS2:
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
					{
 
					}
				}
			}
		}
Задача в том, чтобы после ответа сервера вернуть результат, и в зависимости от иного выполнять действия. Подскажите, каким образом организовать Return?

Старый 22.02.2013, 14:56
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
1. Анонимные функции - зло. Что вам мешаете определить function load в теле класса?
2. Запрос/ответ к серверу - это асинхронная операция, т.е. ваш код не будет ждать ответа, а будет исполняться дальше, соответственно return сделать нельзя. Поэтому функция load должна содержать или вызывать код, в который вы хотели сделать ваш return.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
я, для упрощения себе задачи, создал класс, который работает с запросом
Код AS3:
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);
			}
		}
	}
}
Используется просто. Где-то в коде просто создаем новый пакет:
Код AS3:
var packet:Packet = new Packet("someServerMethod", onPacketData); // можно так же передать объект с переменныи. Они прийдут на сервер в запросе POST, в котором ключи и значения буду соответствовать ключам из начениям в переданном объекте
 
function onPacketData(params:Object):void { // вообще, в место Object надо бы URLVariables принимать. Но с объектом тоже прокатывает
     // здесь можно обрабатывать пришедшие данные
}

Старый 22.02.2013, 15:51
loigor3 вне форума Посмотреть профиль Отправить личное сообщение для loigor3 Найти все сообщения от loigor3
  № 4  
Ответить с цитированием
loigor3

Регистрация: Apr 2011
Сообщений: 20
iNils, спасибо, учту.
caseyryan, спасибо, слямзил)

Создать новую тему Ответ Часовой пояс GMT +4, время: 17:01.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 17:01.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.