AS2:使用sendandload加载类变量

时间:2009-06-15 08:49:14

标签: php actionscript-2

我正在将Actionscript 2.0与PHP结合使用,现在我可以调用我的PHP文件并接收数据,但显然我必须立即使用该数据,我不能用它来填充我的类变量。

这就是我想要的:

class user {

var lastname:String;

function user(in_ID:Number){
        var ontvang:LoadVars = new LoadVars();
        var zend:LoadVars = new LoadVars();
        zend.ID = in_ID;
        zend.sendAndLoad("http://localhost/Services/getUser.php", ontvang, "POST");
        ontvang.onLoad = function(success:Boolean) {
            if (success) {
                lastname = ontvang.lastname;
            } else {
                lastname = 'error';
            }
        };
}
}

我发现这是AS2中的一个大问题,如果您正在加载XML数据,我发现这篇文章可以解决它,但我似乎无法使用它来使用LoadVars: http://www.actionscript.org/forums/showthread.php3?t=144046

任何帮助将不胜感激..

1 个答案:

答案 0 :(得分:2)

当你的onLoad处理程序被调用时,它被调用就好像它是LoadVars实例的成员函数,而不是你的用户实例。

有几种解决方法,一种方法是使用Delegate.create()创建一个按预期工作的函数,例如:

import mx.utils.Delegate;

class user {

    var lastname:String;
    var ontvang:LoadVars;

    function user(in_ID:Number){
                ontvang = new LoadVars();
                var zend:LoadVars = new LoadVars();
                zend.ID = in_ID;
                ontvang.onLoad = Delegate.create(this, onLoad);                
                zend.sendAndLoad("http://localhost/Services/getUser.php", ontvang, "POST");

                };
    }

    function onLoad(success:Boolean) : Void
    {
       if (success) {
          lastname = ontvang.lastname;
       } else {
          lastname = 'error';
       }
    }
}

不要忘记加载是异步的 - 当您创建一个用户对象时,成员变量将不会立即可用。您可能需要做的是让您的用户对象能够像LoadVars一样发出准备信号(例如,使用调用者提供的回调函数),以便您的应用程序由这些异步事件驱动。