在我的项目中,我使用了Google Adwords API和Yahoo API。我想通过使用flex同时向两个API发送请求。是否可以同时发送请求。如果不是,我怎么做?
slhcrj9b1#
由于flex是基于事件的,这应该很简单。只需创建2个URLRequest对象(我假设这两个API都是基于REST的),并设置GET变量。为每个URLRequest对象创建一个loadComplete事件侦听器,并在每个eventlistener中编写处理来自两个API的结果的代码。应该可以了
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>
字符串希望有帮助!请回复评论,我会留意的。
2条答案
按热度按时间slhcrj9b1#
由于flex是基于事件的,这应该很简单。只需创建2个URLRequest对象(我假设这两个API都是基于REST的),并设置GET变量。为每个URLRequest对象创建一个loadComplete事件侦听器,并在每个eventlistener中编写处理来自两个API的结果的代码。
应该可以了
db2dz4w82#
不是“同时”,不是。首先,您只有一个(后台)线程可以使用,并且该线程一次只能做一件事,因此无论您如何编写代码,其中一个请求将始终首先启动。
如果您问的是是否可以在一次调用中向这两个服务发送请求,那么答案仍然是否定的(因为这两个服务将具有不同的URL,并且ActionScript API不接受数组作为URL参数,它们只接受字符串)。
也就是说,我想你可以“伪造它”,可以这么说,让你的Flex应用程序调用你自己编写的服务--例如,用C# --然后让那个服务(同步地)调用Google,然后是Yahoo,然后将控制权返回给你的Flex应用程序沿着返回一个修改后的结果集,其中包括分别从Google和Yahoo返回的任何结果。
除非我误解(或过度思考)了这个问题。;)
下面是一些示例代码,说明了一种处理调用两个服务的方法--不是并发调用,而是使用mx.rpc.HTTPService一个接一个地调用:
字符串
希望有帮助!请回复评论,我会留意的。