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

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

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

Регистрация: Oct 2009
Сообщений: 13
Question Ожидание ответа от PHP

Тема может и избита, но ответа я так и не нашёл....
Вообщем суть вопроса:
Есть вот такой код из Файл1.as
Код AS3:
var chSendData:connectToDB = new connectToDB(mcErr);
this.chLineAll = chSendData.chData(this.chLine.text+"\n");
Это отрабатывает при нажатии на кнопку и передаётся в РНР, тут проблем нет (и забегая на перёд - есть одновременно, в this.chLineAll ничего не приходит )
вот реализация connectToDB из Файл2.as
Код AS3:
public function chData(chString:String):String
{
           this.strChatLine = "";
           this.urlRequestScript = new URLRequest("http://10.8.98.11/magic.ua/php/chat.php")
           this.urlRequestScript.method = URLRequestMethod.POST;    
           this.urlLoaderData.addEventListener(Event.COMPLETE, sendChatString);
           this.urlVarible.strChat = chString;
           this.urlRequestScript.data = this.urlVarible;
           this.urlLoaderData.dataFormat = URLLoaderDataFormat.TEXT;
           try
           { 
                      this.urlLoaderData.load(this.urlRequestScript);
           } 
           catch (err:Error) 
           { 
                     var mcURLErr:errWindow = new errWindow("Ошибки при передаче данных в БД", this.mcErr);
           }
           return this.strChatLine; //Отрабатывает раньше, чем this.strChatLine принимает значение от РНР
}
 
internal function sendChatString(e:Event):void
{
           this.strChatLine = e.target.data;
           var mcURLErr:errWindow = new errWindow(this.strChatLine, this.mcErr);
           this.urlLoaderData.removeEventListener(Event.COMPLETE, sendChatString);
}
Как я понимаю, что просто задача по получению данных уходит в другой поток и отрабатывает уже потом, после того как был отработан return.
Так вот сам вопрос как сделать задержку, что б this.strChatLine принимал значение и только потом отрабатывал return!?

пробовал сделать вот так
Код AS3:
{
....
while(this.strChatLine == "")
{
}
return this.strChatLine;
}
но тогда флешка вылетает по таймауту, и к тому же это не есть хорошо.

Старый 11.11.2009, 12:38
dsQuadro вне форума Посмотреть профиль Отправить личное сообщение для dsQuadro Посетить домашнюю страницу dsQuadro Найти все сообщения от dsQuadro
  № 2  
Ответить с цитированием
dsQuadro
 
Аватар для dsQuadro

Регистрация: Feb 2008
Адрес: Москва
Сообщений: 238
Отправить сообщение для dsQuadro с помощью ICQ
ретурн тут никак не отработает... только на листенер окончания загрузки ставить дальнейшие действия...

Старый 11.11.2009, 13:21
UginL7 вне форума Посмотреть профиль Отправить личное сообщение для UginL7 Найти все сообщения от UginL7
  № 3  
Ответить с цитированием
UginL7

Регистрация: Oct 2009
Сообщений: 13
Цитата:
Сообщение от dsQuadro Посмотреть сообщение
ретурн тут никак не отработает... только на листенер окончания загрузки ставить дальнейшие действия...
Подскажите пожалуйста, как это сделать.

Старый 11.11.2009, 13:24
ramshteks вне форума Посмотреть профиль Отправить личное сообщение для ramshteks Найти все сообщения от ramshteks
  № 4  
Ответить с цитированием
ramshteks
 
Аватар для ramshteks

Регистрация: Jul 2007
Сообщений: 805
Отправить сообщение для ramshteks с помощью ICQ Отправить сообщение для ramshteks с помощью Skype™
например событием

Старый 11.11.2009, 13:59
dsQuadro вне форума Посмотреть профиль Отправить личное сообщение для dsQuadro Посетить домашнюю страницу dsQuadro Найти все сообщения от dsQuadro
  № 5  
Ответить с цитированием
dsQuadro
 
Аватар для dsQuadro

Регистрация: Feb 2008
Адрес: Москва
Сообщений: 238
Отправить сообщение для dsQuadro с помощью ICQ
this.urlLoaderData.contentLoaderInfo.addEventLisener(Event.INIT, initListener)
на листенер нужно сажать код который должен работать после завершения загрузки

Старый 11.11.2009, 15:18
Felicast вне форума Посмотреть профиль Отправить личное сообщение для Felicast Найти все сообщения от Felicast
  № 6  
Ответить с цитированием
Felicast
 
Аватар для Felicast

Регистрация: Feb 2008
Адрес: Череповец
Сообщений: 623
Отправить сообщение для Felicast с помощью ICQ
Цитата:
Сообщение от dsQuadro Посмотреть сообщение
this.urlLoaderData.contentLoaderInfo.addEventLisener(Event.INIT, initListener)
чета вы фигню написали. давно ли у нас у URLLoader есть contentLoaderInfo? да и причем тут INIT?

обработчик окончания загрузки у товарища и так есть:
Цитата:
Код AS3:
this.urlLoaderData.addEventListener(Event.COMPLETE, sendChatString);
по теме: такого результата:
Код AS3:
var chSendData:connectToDB = new connectToDB(mcErr);
this.chLineAll = chSendData.chData(this.chLine.text+"\n");
вам не добиться.
можно попробовать так:
Код AS3:
internal function sendChatString(e:Event):void
{
           this.strChatLine = e.target.data;
           var mcURLErr:errWindow = new errWindow(this.strChatLine, this.mcErr);
           this.urlLoaderData.removeEventListener(Event.COMPLETE, sendChatString);
           dispatchEvent(new Event(Event.COMPLETE));
}
 
******************
 
var chSendData:connectToDB = new connectToDB(mcErr);
chSendData.addEventListener(Event.COMPLETE, completeHandler);
 
******************
 
private function completeHandler(event:Event):void
{
           var chSendData:connectToDB = event.target as connectToDB;
           this.chLineAll = chSendData.strChatLine;
}
ps: называйте классы с большой буквы
__________________
я могу стать всем, если только захочу

Старый 11.11.2009, 15:35
dsQuadro вне форума Посмотреть профиль Отправить личное сообщение для dsQuadro Посетить домашнюю страницу dsQuadro Найти все сообщения от dsQuadro
  № 7  
Ответить с цитированием
dsQuadro
 
Аватар для dsQuadro

Регистрация: Feb 2008
Адрес: Москва
Сообщений: 238
Отправить сообщение для dsQuadro с помощью ICQ
Цитата:
Сообщение от Felicast Посмотреть сообщение
чета вы фигню написали. давно ли у нас у URLLoader есть contentLoaderInfo? да и причем тут INIT?
извиняюсь... действительно фигню сморозил... думал о другом в это время...

Старый 11.11.2009, 20:00
UginL7 вне форума Посмотреть профиль Отправить личное сообщение для UginL7 Найти все сообщения от UginL7
  № 8  
Ответить с цитированием
UginL7

Регистрация: Oct 2009
Сообщений: 13
Спасибо за идеи... Решил задачу сам и немного другим образом... решил передавать 2-а параметра и ничего не возвращать
Код AS3:
var chLine:TextField = new TextField();
.......................
chData(chString:String, chList:TextField):void
{
.......................
            try
           { 
                      this.chLine = chList;//добавил
                      this.urlLoaderData.load(this.urlRequestScript);
           } 
.......................
}
internal function sendChatString(e:Event):void
{
           this.strChatLine = e.target.data;
           var mcURLErr:errWindow = new errWindow(this.strChatLine, this.mcErr);
           this.chLine.appendText(this.strChatLine); //добавил
           this.urlLoaderData.removeEventListener(Event.COMPLETE, sendChatString);
и при вызове добавил второй параметр - TextField в который надо добавить обработанную строку. Теперь всё работает.

Скажите пожалуйста, это нормальное решение или у него есть глюки?(я их пока не нашёл)

Старый 11.11.2009, 20:27
Felicast вне форума Посмотреть профиль Отправить личное сообщение для Felicast Найти все сообщения от Felicast
  № 9  
Ответить с цитированием
Felicast
 
Аватар для Felicast

Регистрация: Feb 2008
Адрес: Череповец
Сообщений: 623
Отправить сообщение для Felicast с помощью ICQ
Цитата:
Скажите пожалуйста, это нормальное решение или у него есть глюки?(я их пока не нашёл)
с точки зрения проектирование - не совсем хорошее (да и мое тоже).
класс работы с бд в идеале ничего не должен знать ни о каких TextField, errWindow. у него запросили данные - он начал грузить, загрузил - сообщил что загрузил. а что там будет с данными делаться ему должно быть по барабану.

ах да, блок трай кетч там не нужен, ошибки там не возникнет. если ошибка возникнет, она будет уже за пределами трай кетч. чтобы ее поймать надо подписаться на событие (читайте в хелпе)
__________________
я могу стать всем, если только захочу

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

Теги
php , return , задержка ответа

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

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


 


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


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