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