Apache Flex 可以同时向Google和Yahoo API发送请求吗?

k4ymrczo  于 2023-08-02  发布在  Apache
关注(0)|答案(2)|浏览(159)

在我的项目中,我使用了Google Adwords API和Yahoo API。我想通过使用flex同时向两个API发送请求。
是否可以同时发送请求。如果不是,我怎么做?

slhcrj9b

slhcrj9b1#

由于flex是基于事件的,这应该很简单。只需创建2个URLRequest对象(我假设这两个API都是基于REST的),并设置GET变量。为每个URLRequest对象创建一个loadComplete事件侦听器,并在每个eventlistener中编写处理来自两个API的结果的代码。
应该可以了

db2dz4w8

db2dz4w82#

不是“同时”,不是。首先,您只有一个(后台)线程可以使用,并且该线程一次只能做一件事,因此无论您如何编写代码,其中一个请求将始终首先启动。
如果您问的是是否可以在一次调用中向这两个服务发送请求,那么答案仍然是否定的(因为这两个服务将具有不同的URL,并且ActionScript API不接受数组作为URL参数,它们只接受字符串)。
也就是说,我想你可以“伪造它”,可以这么说,让你的Flex应用程序调用你自己编写的服务--例如,用C# --然后让那个服务(同步地)调用Google,然后是Yahoo,然后将控制权返回给你的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>

字符串
希望有帮助!请回复评论,我会留意的。

相关问题