2010-01-28 70 views
2

好的我有一个HTTPService,只要它从send()调用得到结果就执行dataLoaded(e:ResultEvent):void函数。Flex:取消HTTPService.send()?

行,所以如果我打电话HTTPService.send(),然后再次调用HTTPService.send()前一个接收一个结果之前,我结束了重复运行dataLoaded()这是不可取的

我要的是,如果HTTPService.send()被以前调用之前叫返回结果。我想取消第一个通话,只处理最后一次通话的结果到HTTPService.send()

我希望这是有道理的。

我该怎么做?

谢谢!

回答

5

其实HTTPService可以为你管理这个。它有一个并发属性,您应该将其设置为“last”。

此处了解详情:HTTPService#concurrency

+0

大家好, 如何停止HTTP服务的执行时,当它在中间? 我的情景; 我做了一个搜索服务,从前端文本输入数据库搜索患者。 如果用户在我再次发送服务呼叫之前更改了他/她所输入的文本,但是我希望基于最后输入的文本得到结果,那么我发送的第一个呼叫()我想销毁或停止它。 我如何实现这一目标? 在此先感谢。 – 2011-10-31 10:09:34

+0

请参阅:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/rpc/http/HTTPService.html#cancel() – 2011-10-31 15:07:02

6

HTTPService有一个取消方法。如果您在没有参数的情况下调用它,它应该取消上次调用服务。试一试,看看你是否仍然得到不需要的结果事件。

使用ASyncToken的存在来确定取消是否合适。

private var _serviceCall:ASyncToken; 

function callMyService(stuff:Object):void { 
    if (_serviceCall !== null) { 
     myService.cancel(); 
     _serviceCall = null; 
    } 
    _serviceCall = myService.send(stuff) 
} 
+0

+1,因为我无法接受我两个答案:) – 2010-01-28 21:47:38

+0

+1过,因为它是一个很好的答案:) – 2010-01-28 22:01:27

+0

+1好的答案:P – 2011-08-03 09:23:10

1

除了罗伯特的回答是:Flex: Cancel HTTPService.send()?

的HTTPService#并发似乎被引入到Flex 4中,我没有在Flex 3中找到。在Flex 3.中,您必须手动取消之前的调用,而不是Flex 4中的并发=“last”。

请注意,这不会中断前一个调用调用的服务器进程,这意味着服务器可能仍然会然而,尽管已经放弃了回应。

+0

我的错误,我发现这个属性在最新的Flex 3.6中,似乎我的3.x文档很旧。 – 2011-08-23 05:04:50

相关问题