我试图在Adobe Flex(Actionscript)中创建HTTP请求,如下所示:
var p:PersonSearchController = new PersonSearchController();
showAlertDialog();
p.search(sc);
alert.cancel();
navigator.pushView(views.PersonSearchResults, +p.getResp());
所以基本上,在搜索之前我们得到一个“Searching ...”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响应之前,如何制作弹出窗口?
由于 菲尔
答案 0 :(得分:1)
请勿使用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" />
答案 1 :(得分:0)
HTTPService / URLRequest(任何远程调用)都是设计异步的,跨网络的请求需要花费不同的时间,所以不用说用户在请求之前需要多长时间才能锁定他们的机器/进程/插件回报。你应该做的是在发出请求时弹出一个加载对话框然后移动你的代码以显示另一个弹出窗口(并关闭加载对话框)到完整的处理程序中。基本上移动这个:
alert.cancel();
navigator.pushView(views.PersonSearchResults,+ p.getResp());
进入完整的处理程序并使p成为私有局部变量(如果需要提前实例化或设置属性)。