AS2: загрузить переменные класса с помощью sendandload - PullRequest
1 голос
/ 15 июня 2009

Я использую 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 Ответ

2 голосов
/ 15 июня 2009

Когда вызывается ваш обработчик 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 (например, с помощью функции обратного вызова, предоставляемой вызывающей стороной), чтобы ваше приложение управлялось этими асинхронными событиями.

...