Создание HTTPRequest и получение ответа (Adobe Flex) - PullRequest
1 голос
/ 29 марта 2011

Я пытаюсь сделать HTTP-запрос в Adobe Flex (Actionscript) следующим образом:

var p:PersonSearchController = new PersonSearchController();
showAlertDialog();
p.search(sc);
alert.cancel();

navigator.pushView(views.PersonSearchResults, +p.getResp());

Таким образом, в основном, перед поиском мы получаем окно AlertDialog "Поиск ...", как только поискзавершено, диалоговое окно исчезает, и экран результатов помещается на экран ...

Вот метод поиска:

function search{
var requestSender:URLLoader= new URLLoader();

dispatcher.addEventListener(Event.COMPLETE, completeHandler);

var urlRequest :URLRequest = new URLRequest("http://airpoint05:8888/MPS2/PersonSearch");

var msg:String = "blah";

/* Setup HTTP Request */
urlRequest.data = msg;
urlRequest.contentType = "application/x-www-form-urlencoded";
urlRequest.method = URLRequestMethod.POST;
requestSender.load(urlRequest);
}

А вот функция completeHandler:

/* URL has completed and got a response */
private function completeHandler(event:Event):void
{
    var response:URLLoader = URLLoader(event.target);
    this.res = URLLoader(event.target).data;
    trace(this.res);
    response.close();   
}

Когда вызывается эта строка: navigator.pushView (views.PersonSearchResults, + p.getResp ());

p.getResp () - ничто, поскольку ответ еще не вернулся.Я хочу, чтобы программа в основном блокировалась до получения HTTPResponse, чтобы я мог обработать результаты.В тот момент, когда всплывающее окно появляется и быстро исчезает, а в фоновом режиме поиск прекращается и выполняется запрос ... Я получаю ответ, но только после того, как экран результатов был выдвинут.Как я могу сделать блокировку всплывающих окон, пока мы не получим ответ HTTP?

Спасибо, Фил

Ответы [ 2 ]

1 голос
/ 29 марта 2011

Не используйте для этого URLLoader, используйте HTTPService:

<fx:Script>
<![CDATA[
private function search(text:String):void
{
service.send({search:text}); // your service will receive the variable 'search' with your string
}

private function resultHandler(e:ResultEvent):void
{
var data:Object = e.result;
// do whatever else here
}
]]>
</fx:Script>
<s:HTTPService id="service" method="POST" url="http://airpoint05:8888/MPS2/PersonSearch" result="resultHandler" />
0 голосов
/ 29 марта 2011

HTTPService / URLRequest (любые удаленные вызовы) по своей конструкции асинхронны, запросы по сети занимают переменное количество времени, поэтому невозможно сказать, сколько времени пользователю придется сидеть, когда его машина / процесс / плагин заблокированы перед запросомвозвращается.Вместо этого вам следует открыть диалоговое окно загрузки во время выполнения запроса, а затем переместить код для отображения другого всплывающего окна (и закрытия диалогового окна загрузки) в обработчик завершений.В основном переместите это:

alert.cancel ();

navigator.pushView (views.PersonSearchResults, + p.getResp ());

в полный обработчик и сделайтеpa приватная локальная переменная (если вам нужно создать ее экземпляр заранее или задать для нее свойства).

...