AS3:如何在onComplete函数之外访问URLLoader请求的输出?

时间:2012-08-02 14:30:12

标签: flash actionscript urlloader

我正在尝试访问onComplete函数中的data_file值,但说实话我甚至不确定我是否正确调用它。

public function version():String{
    var string_val = "";
    var data_file = "";

    //var request:URLRequest = new URLRequest("indexdynamic.php");
    var request:URLRequest = new URLRequest("http://localhost/indexdynamic.php");
        request.method = URLRequestMethod.POST;

    var verVars:URLVariables = new URLVariables();

    request.data = verVars

    var loader:URLLoader = new URLLoader(request);
    loader.addEventListener(Event.COMPLETE, onComplete);
    loader.dataFormat = URLLoaderDataFormat.VARIABLES;
    loader.load(request);

    function onComplete(event:Event):String{
        string_val = event.target.data.Var.toString();

        if (string_val ==  "First Selection") {
            data_file = "fill_in_blanks_doi.xml";
        }else {
            data_file = "fill_in_blanks_2_doi.xml";
        }
        return data_file;
    }
    var data_file = onComplete(loader.COMPLETE);
    return data_file;
}

3 个答案:

答案 0 :(得分:1)

通常,事件侦听器函数返回void。因此,您不会通过返回值从事件侦听器获取值。

所以第一步:

删除:var data_file = onComplete(loader.COMPLETE); 删除:return data_file; //删除两行。返回一个值。 更改函数标题以返回void:

function onComplete(event:Event):void{

现在您将保存“data_file”变量,而不是意外覆盖它。但是,由于这是一个异步操作,现在您的代码的某些部分正在等待调用,因为您已经设置了变量。您需要在onComplete()中添加一行以继续执行应用程序中的代码。它可能是这样的:

processXML(data_file);

trace("Data File:", data_file);

希望能为你清除它。

===编辑===

我回去再次阅读你的代码,我发现了别的东西。您在函数中声明了一个函数。这通常不是一个好主意。我建议在getVersion()函数之外移动onComplete()函数。

第二 - 你的getVersion()函数返回一个字符串,这意味着它是一个同步函数 - 调用调用代码需要立即回复。这不行。 URLLoader是异步的 - 您可以调用它,并且在将来的某个不确定点上它会响应。因此,您的代码可以自由地执行其他操作 - 例如显示加载程序栏 - 同时从服务器获取响应并传输数据。完成后,灯光将调用其听众。只有在这一点上,您描述版本的最初目标才有可能。

所以 - 您需要更改代码以暂停执行直到加载完成,然后让onComplete侦听器在加载信息并准备好使用后再次开始滚动。

答案 1 :(得分:0)

您必须通过将数据写入在方法之外声明的变量来提供对数据的访问。

答案 2 :(得分:0)

您始终可以将输出存储到全局数组中,该数组可以从应用程序的任何位置访问。

var myArray:Array = new Array();

function onComplete(e:Event):void {
   myArray.push(e.target.data);
}