0

我正在尝试访问 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;
}
4

3 回答 3

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);

希望能为您解决问题。

=== 编辑 ===

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

其次 - 您的 getVersion() 函数返回一个字符串,这意味着它是一个同步函数 - 意味着调用代码期望立即得到答复。这行不通。URLLoader 是异步的——你调用它,它会在未来某个不确定的时间点做出响应。因此,您的代码可以自由地做其他事情——比如显示加载器栏——同时它从服务器获得响应并传输数据。完成后,laoder 将调用其侦听器。只有在这一点上,您描述版本的最初目标才有可能。

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

于 2012-08-03T16:53:00.813 回答
0

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

于 2012-08-02T15:05:44.163 回答
0

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

var myArray:Array = new Array();

function onComplete(e:Event):void {
   myArray.push(e.target.data);
}
于 2014-09-24T16:24:24.943 回答