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

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

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

Регистрация: Aug 2008
Сообщений: 35
Attention Как присвоить переменной значение функции?

Возникла проблема. В коде использую конструкцию:
Код AS3:
var tt:Object = dataJSON ('http://site.ru/get.php', { "user":1, "sekret":"123654789" } );
 
private function dataJSON (url:String, parameters:Object):Object {
	var data:Object;
	var variables:URLVariables = new URLVariables();
	var ldr:URLLoader = new URLLoader();
	var request:URLRequest = new URLRequest(url);
	for (var name:String in parameters){
		variables[name] = parameters[name];
	}
	request.data = variables;
	ldr.dataFormat = URLLoaderDataFormat.TEXT;
	ldr.addEventListener (Event.COMPLETE, handleComplete);
	ldr.load (request);
	function handleComplete (e:Event):void {
		data = JSON.deserialize(ldr.data);
	}
	return data;
}
после выполнения, переменная tt имеет значение = null, то есть оно не дожидается выполнения подфункции handleComplete ((( Т.е. мне нужно чтобы загрузились данные с сервера и присвоились значению tt
как это можно исправить или грамотно сделать ???
заранее спасибо


Последний раз редактировалось shurco2; 02.06.2010 в 19:10.
Старый 02.06.2010, 19:13
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 2  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Вынести handleComplete в отдельный метод и внутри него присвоить переменной tt нужное значение.
Вообще вложенные функции не стоит использовать.

Старый 02.06.2010, 19:16
shurco2 вне форума Посмотреть профиль Отправить личное сообщение для shurco2 Найти все сообщения от shurco2
  № 3  
Ответить с цитированием
shurco2

Регистрация: Aug 2008
Сообщений: 35
так не сойдет, дело в том что у меня
var tt:Object = dataJSON ('http://site.ru/get.php', { "user":1, "sekret":"123654789" } );
конструкций может быть некоторое количество, а под каждый вызов создавать новый handleComplete - как то неразумно, ваш вариант удобный для 1 вызова

Старый 02.06.2010, 19:18
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 4  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Создавать надо один листенер на всех.

Старый 02.06.2010, 19:19
shurco2 вне форума Посмотреть профиль Отправить личное сообщение для shurco2 Найти все сообщения от shurco2
  № 5  
Ответить с цитированием
shurco2

Регистрация: Aug 2008
Сообщений: 35
я что то туплю тогда
поподробнее, что вы имеете в виду

Старый 02.06.2010, 19:25
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 6  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Я, если честно, тоже тебя не понял. Кого может быть несколько? tt:Object? Или dataJSON() и подобные? Если второй вариант - то в каждом dataJSON() слушается Event.COMPLETE и выполняется
Код AS3:
private function handleComplete (event:Event):void
{
       var loader:URLLoader = event.target as URLLoader ;
       data = JSON.deserialize(loader.data);
}

Старый 02.06.2010, 19:36
shurco2 вне форума Посмотреть профиль Отправить личное сообщение для shurco2 Найти все сообщения от shurco2
  № 7  
Ответить с цитированием
shurco2

Регистрация: Aug 2008
Сообщений: 35
к примеру
Код AS3:
var tt01:Object = dataJSON ('http://site.ru/get.php', { "user":3 } );
var tt02:Object = dataJSON ('http://site.ru/get.php', { "sekret":"p123654789" } );
var tt03:Object = dataJSON ('http://site.ru/get.php', { "id":2315465 } );
и так далее , хотелось бы чтобы функция отдавала полученное значение, если это конечно возможно


Последний раз редактировалось udaaff; 02.06.2010 в 20:08.
Старый 02.06.2010, 19:42
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 8  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Нет, не возможно, URLLoader.load может работать только асинхронно.
__________________
Hell is the possibility of sanity

Старый 02.06.2010, 19:44
shurco2 вне форума Посмотреть профиль Отправить личное сообщение для shurco2 Найти все сообщения от shurco2
  № 9  
Ответить с цитированием
shurco2

Регистрация: Aug 2008
Сообщений: 35
А есть какие либо варианты или идеи, чтобы можно было бы запустить такую конструкцию ???

Старый 02.06.2010, 20:47
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 10  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Где-то так обычно делаю.
Код AS3:
private var loadersMap:Dictionary = new Dictionary(true);
private function dataJSON (url:String, parameters:Object, extras:Array):void{
	var data:Object;
	var variables:URLVariables = new URLVariables();
	var ldr:URLLoader = new URLLoader();
	var request:URLRequest = new URLRequest(url);
	for (var name:String in parameters){
		variables[name] = parameters[name];
	}
	request.data = variables;
	ldr.dataFormat = URLLoaderDataFormat.TEXT;
	ldr.addEventListener (Event.COMPLETE, handleComplete);
	ldr.load (request);
	loadersMap[ldr] = extras;
}
private function handleComplete (e:Event):void {
		data = JSON.deserialize(ldr.data);
		var extras:Array = loadersMap[ev.target];
		delete loadersMap[ev.target];
//далее можно творить что угодно, в стиле
		extras[0] = data;
		extras[1](extras[0], extras[2]);
	}
//ну и для этого функция типа
private function extendedHandleComplete(ourTT:Object, smthMoreYouNeed:String):void {
...
}
юзать
Код AS3:
dataJSON('http://site.ru/get.php', { "user":3 }, [tt0, extendedHandleComplete, "user"]);

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

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

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


 


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


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