as3 return 加载程序完成时的值
as3 return value on loader complete
我试图让我的函数在加载后从 php 脚本中 return 获取一个值。我在 'return' 方面遇到问题。尝试从其中包含 'return' 的函数中获取“TheLink”的值。它通常为空。我在这里做错了什么?
var theLink = loadAudio();
public function loadAudio():String
{
var req:URLRequest = new URLRequest("myScript.php");
var loader:URLLoader = new URLLoader(req);
loader.dataFormat = URLLoaderDataFormat.VARIABLES;
loader.addEventListener(Event.COMPLETE, Finished);
function Finished(e:Event)
{
var theValue = JSON.parse(e.target.data.audioLink);
return theValue;
}
}
您的代码中有很多错误,但更重要的是您无法摆脱 AS3 的异步特性。
首先,即使 AS3 不是异步的,您的代码仍然无法运行。 "loadAudio" 从不 return 任何东西,因此 theLink 永远无法获取任何数据。 'Finished' 方法是一个 return 方法,但也没有变量来捕获该数据。
现在真正的东西,AS3 是异步的,这意味着事情会在稍后发生,这就是为什么你需要传递一个事件侦听器以便 'catch' 当事情发生时。在您的情况下,Event.COMPLETE 将在稍后触发(异步),因此变量无法在结果实际可用之前捕获结果,因此:
var theLink:Object = loadAudio();//this is not possible
正确的做法是:
private var loader:URLLoader;//avoid GC
private var theLink:Object;//this will store result when available
//I assume you are using a class
public function MyClass()
{
loadAudio();//let's start loading stuff
}
private function loadAudio():void
{
var req:URLRequest = new URLRequest("myScript.php");
loader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.VARIABLES;
loader.addEventListener(Event.COMPLETE, handleLoaded);
loader.load(req);
}
private function handleLoaded(e:Event):void
{
theLink = JSON.parse(e.target.data.audioLink);
//done loading so store results.
}
我试图让我的函数在加载后从 php 脚本中 return 获取一个值。我在 'return' 方面遇到问题。尝试从其中包含 'return' 的函数中获取“TheLink”的值。它通常为空。我在这里做错了什么?
var theLink = loadAudio();
public function loadAudio():String
{
var req:URLRequest = new URLRequest("myScript.php");
var loader:URLLoader = new URLLoader(req);
loader.dataFormat = URLLoaderDataFormat.VARIABLES;
loader.addEventListener(Event.COMPLETE, Finished);
function Finished(e:Event)
{
var theValue = JSON.parse(e.target.data.audioLink);
return theValue;
}
}
您的代码中有很多错误,但更重要的是您无法摆脱 AS3 的异步特性。
首先,即使 AS3 不是异步的,您的代码仍然无法运行。 "loadAudio" 从不 return 任何东西,因此 theLink 永远无法获取任何数据。 'Finished' 方法是一个 return 方法,但也没有变量来捕获该数据。
现在真正的东西,AS3 是异步的,这意味着事情会在稍后发生,这就是为什么你需要传递一个事件侦听器以便 'catch' 当事情发生时。在您的情况下,Event.COMPLETE 将在稍后触发(异步),因此变量无法在结果实际可用之前捕获结果,因此:
var theLink:Object = loadAudio();//this is not possible
正确的做法是:
private var loader:URLLoader;//avoid GC
private var theLink:Object;//this will store result when available
//I assume you are using a class
public function MyClass()
{
loadAudio();//let's start loading stuff
}
private function loadAudio():void
{
var req:URLRequest = new URLRequest("myScript.php");
loader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.VARIABLES;
loader.addEventListener(Event.COMPLETE, handleLoaded);
loader.load(req);
}
private function handleLoaded(e:Event):void
{
theLink = JSON.parse(e.target.data.audioLink);
//done loading so store results.
}