【问题标题】:Flex httpservice error handlingFlex httpservice 错误处理
【发布时间】:2013-06-14 01:20:15
【问题描述】:

我正在使用 httpservice,一旦调用它就没有任何反应。我没有得到结果或错误?我添加了各种侦听器,但无法捕获任何错误。我错过了什么吗?

    private function GetUsersServers():void
    {
        var serviceObj:HTTPService = new HTTPService();
        serviceObj.resultFormat = 'text';
        serviceObj.method = 'GET';
        serviceObj.useProxy = false;
        serviceObj.addEventListener(ResultEvent.RESULT, GetUsersServersResult);
        serviceObj.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
        serviceObj.addEventListener(IOErrorEvent.IO_ERROR, onLoadError);
        serviceObj.addEventListener(Event.COMPLETE, onLoadComplete);
        serviceObj.url = '************************';

        var parameters:Object = new Object();
        parameters["Username"] = m_strUserSIP;

        LogAddItem( -1, "GetUsersServers Request - User = " + parameters.Username);
        serviceObj.send(parameters);
    }

    private function onLoadComplete(e:Event):void
    {
        var loader:URLLoader = URLLoader(e.target);
        LogAddItem( LOG_CATEGORY_MAIN_DEBUG, "securityErrorHandler: " + loader.data);
    }

    // check for security error - probably crossdomain issue
    private function securityErrorHandler(event:SecurityErrorEvent):void {
        LogAddItem( LOG_CATEGORY_MAIN_DEBUG, "securityErrorHandler: " + event);
    }

    public function onLoadError(e:IOErrorEvent):void {
        LogAddItem( LOG_CATEGORY_MAIN_DEBUG, "Fault: " + e.text);
    }

    private function GetUsersServersResult(event:ResultEvent):void
    {
        LogAddItem( -1, "GetUsersServers Result Received..");
        var rawData:String = String(event.result);
        LogAddItem( -1, "GetUsersServersResult = " + rawData);
        InitContinue();
    }

【问题讨论】:

  • 我认为你应该收听fault事件;我没有看到您在 docs 中收听的任何错误事件。

标签: actionscript-3 apache-flex flex3


【解决方案1】:

问题很可能是您在函数GetUsersServers() 中声明了HTTPService。当该函数完成时,保存HTTPService 的变量不再存在并且可以进行垃圾回收。

相反,如果您将HTTPService 声明为成员变量,则该变量将存在于它所在的类的整个生命周期中。因此请尝试以下操作:

private var serviceObj:HTTPService;

private function GetUsersServers():void
{
    serviceObj = new HTTPService();
    ...
}

【讨论】:

  • 我已经做出了这个改变,但不幸的是我仍然没有得到结果/错误。我的听众是否正确,我可以添加更多吗?
  • 只要一个实例附加了事件监听器,它就没有资格进行垃圾回收。恐怕这不是问题的原因。
  • @RIAstar 这取决于您添加侦听器的方式。我也想过。在这种情况下,向 HTTPService 添加了一个监听器,并且事件处理函数在“this”类中。所以 HTTPService 维护对“this”类的引用......“This”类除了在函数内部之外没有对 HTTPService 的引用。
  • @VinceLowe 看起来你的事件监听器也错了。查看this page,它显示了由 HTTPService 调度的事件。特别是,您没有添加“故障”事件处理程序,并注意 HTTPService 根本不调度“安全”、“IOError”或“完成”事件。
猜你喜欢
  • 1970-01-01
  • 2020-08-27
  • 1970-01-01
  • 2022-01-26
  • 2011-10-14
  • 2012-03-01
  • 2010-09-21
  • 1970-01-01
  • 2010-11-11
相关资源
最近更新 更多