是否可以同时向Google和Yahoo API发送请求?

时间:2009-05-30 11:12:41

标签: flex api air

在我的项目中,我使用了Google adwords API和Yahoo API。我想通过flex。

同时向两个API发送请求

是否可以同时发送请求。如果不能怎么办?

2 个答案:

答案 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>

希望有所帮助!回复评论,我会留意。