在我的项目中,我使用了Google adwords API和Yahoo API。我想通过flex。
同时向两个API发送请求是否可以同时发送请求。如果不能怎么办?
答案 0 :(得分:3)
因为flex是基于事件的,所以这应该非常简单。只需创建2个URLRequest对象(我假设这两个API都是基于REST的),并设置您的GET变量。为每个URLRequest对象创建一个loadComplete事件侦听器,并在每个eventlisteners中编写处理来自两个API的结果的代码。
应该这样做。
答案 1 :(得分:0)
不是“同时”,不是。首先,你只有一个(后台)线程可以使用,而且该线程一次只能做一件事,所以无论你编写代码,其中一个请求总会先启动。
如果你问的是你是否可以在一次调用中向两个服务发送请求,那么答案就是否定(因为两者都有不同的URL,而ActionScript API不会将数组作为URL参数,他们只采取字符串)。
那就是说,我想你可以“伪造它”,可以这么说,让你的Flex应用程序调用你自己编写的服务 - 例如,在C#中 - 然后让服务调用(同步)谷歌,然后雅虎然后将控制权返回到您的Flex应用程序以及修改后的结果集,其中包括分别从Google和Yahoo发回的任何内容。
除非我误解(或过度思考)这个问题。 ;)
以下是一些示例代码,用于说明处理调用两个服务的一种方法 - 不是同时使用,而是一个接一个地使用mx.rpc.HTTPService:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="onCreationComplete()">
<mx:Script>
<![CDATA[
import mx.rpc.http.HTTPService;
import mx.rpc.events.ResultEvent;
import mx.rpc.events.FaultEvent;
private function onCreationComplete():void
{
callGoogle();
callYahoo();
}
private function callGoogle():void
{
var svc:HTTPService = new HTTPService();
svc.url = "http://api.google.com/someservice.xml";
svc.addEventListener(ResultEvent.RESULT, onGoogleResult, false, 0, true);
svc.addEventListener(FaultEvent.FAULT, onGoogleFault, false, 0, true);
svc.send();
}
private function callYahoo():void
{
var svc:HTTPService = new HTTPService();
svc.url = "http://api.yahoo.com/someservice.xml";
svc.addEventListener(ResultEvent.RESULT, onYahooResult, false, 0, true);
svc.addEventListener(FaultEvent.FAULT, onYahooFault, false, 0, true);
svc.send();
}
private function onGoogleResult(event:ResultEvent):void
{
trace(event.result);
}
private function onGoogleFault(event:FaultEvent):void
{
trace(event.fault.message);
}
private function onYahooResult(event:ResultEvent):void
{
trace(event.result);
}
private function onYahooFault(event:FaultEvent):void
{
trace(event.fault.message);
}
]]>
</mx:Script>
</mx:Application>
希望有所帮助!回复评论,我会留意。