2011-05-15 54 views
0

我的Flex应用程序在启动时发送一些共享请求。有时需要花费很多时间来获取它们,所以我将它们设置为requestTimeout param至5秒。另外,我定义了一个处理故障事件的方法。我想在发生超时时重新发送请求。 虽然它不工作。你能看看代码吗?Flex HTTPService超时处理程序

protected function fatalErrorOccuredInfo(event:FaultEvent):void 
{ 
    // get the operation 
    var operation:mx.rpc.http.AbstractOperation = mx.rpc.http.AbstractOperation(event.target); 

    operation.url += "?t=" + new Date().getTime(); 
    operation.useProxy = false; 
    //this should resend a request that caused timeout 
    operation.send(); 

} 

我检查新的请求是否在网络监视器发送,但它并没有显示任何东西:-(

任何帮助将非常感激。

回答

0

WebService类有一个getOperation功能,返回的AbstractOperation

event.currentTarget.name

使用它,所以它将b Ë像

var operation:mx.rpc.http.AbstractOperation = myWebService.getOperation(event.currentTarget.name); 
operation.send(); 

我非常不知道,但如果operation.send()没有得到结果的事件,您可能需要添加一个事件侦听器ResultEvent.RESULT

+0

嗯。我不认为我需要它,因为在这种情况下操作不为空,所以我使AbstractOperation充满了我需要的所有数据。此外,我没有得到任何错误(空指针或某事)。它只是不发送请求。你认为你的解决方案会采取不同的行动? – 2011-05-15 11:35:47

+0

您是否尝试过为测试目的调用不同的Web服务?如果'操作'不为空,那么它应该工作。你有没有放置一个断点,看看'operation.send()'是否被实际执行? :) – 2011-05-15 11:38:56

+0

我还没有尝试过不同的web服务,但我已经做了一些调试,并且operation.send()实际上是执行的。我甚至把Alert.show()放在下一行,它总是出现。总结,它应该工作,但它不。废话。 – 2011-05-15 11:42:09

0

一个问题,我看到的是这一行

operation.url += "?t=" + new Date().getTime(); 

每次您提出请求时,都会附加“?t =”+ new Date()。getTime();
虽然这不应该是你的主要问题,但它是一个问题。

private var operationURL:String = "someurl.com/page.php"; 
private function loadOperation():void{ 
    var operation:mx.rpc.http.AbstractOperation = mx.rpc.http.AbstractOperation(event.target); 
    operation.url = operationURL + "?t=" + new Date().getTime(); 
    operation.useProxy = false; 
    operation.send(); 
} 

private var retryCount:int = 0 
protected function fatalErrorOccuredInfo(event:FaultEvent):void{ 
    // don't want it stuck in an endless loading loop 
    // 10 count is more then enough 
    if(retryCount < 10){ 
    this.loadOperation(); 
    ++retryCount 
    } 
} 

此外,如果您安装了FireFox,请获取名为HTTPfox的插件。
HTTPfox会告诉你所有来自浏览器的请求