2009-06-15 3 views
1

Я использую ActionScript 2.0 в сочетании с PHP, теперь я могу сделать вызов своего PHP-файла и получить данные, но, видимо, мне нужно немедленно использовать эти данные, я не могу использовать его для заполнения мои переменные класса.AS2: переменные класса нагрузки с sendandload

Это то, что я хочу:

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

Любая помощь будет оценена ..

ответ

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

+0

ОК 2 вещи: 1. Где я могу найти класс делегата? 2. В функции onLoad он теперь вызывает ontvang.lastname, но внутри функции onLoad нет переменной ontvang. Спасибо, хотя! – Pmarcoen

+0

Хорошо, видимо, мне просто нужно было добавить импорт mx.utils.Delegate; Я попытался использовать this.lastname вместо ontvang.lastname В моем основном файле у меня теперь есть var u = new user (1); tekst.text = u.getLastname(); Но я все еще получаю «неопределенный» в текстовом поле текста. – Pmarcoen

+0

Извините - исправить. Ontvang должен был быть членом класса, чтобы вы могли забрать его во время onLoad. –

Смежные вопросы