Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   sendAndLoad в функции (http://www.flasher.ru/forum/showthread.php?t=125035)

totruok 15.05.2009 00:16

sendAndLoad в функции
 
Здравствуйте, столкнулся с проблемой, что у меня игнорируется sendAndLoad в функции

Код AS1/AS2:

        getV = function (v1) {
                sendvar.sendAndLoad(SERVER, varxml, "POST");   
                varxml.onLoad  = function() {
                vr=varxml.firstChild.firstChild.nodeValue;
                        trace("Загрузил");
                }
                return vr;
        }


dimarik 15.05.2009 00:26

Внимательно изучите пример работы LoadVars в соответствующем разделе документации.

totruok 15.05.2009 02:01

В Вы не могли бы всё же помочь? Я смотрел документацию, но так и не нашёл ответа на свой вопрос

dimarik 15.05.2009 02:23

Сдается мне, что Вы смешали методы sendAndLoad классов XML и LoadVars. Вы ожидаете в ответе XML, а LoadVars ожидает в ответе пары [имя=значение], разделенные '&'. Так понятнее?

totruok 15.05.2009 02:51

Но без функции у меня всё работает 0_о

dimarik 15.05.2009 03:08

Гм. Пути флеша неиспобедимы. Мой косяк.
По Вам: асинхронная операция загрузки не может моментально вернуть результат. То есть, Вы надеятесь получить результат просто вызвав getV. Она вернет undefined, потому что не будет ждать окончания загрузки.

Вам необходимо продолжить работу после получения ответа. вот и всё
Код AS1/AS2:

var app:Object = this;
 
varxml.onLoad = function(success:Boolean) {
        if (success) {
                trace("Загрузил");
                app.processResponce(this);
        } else {
                trace("Oooops!");
        }
 
};
 
sendvar.sendAndLoad(SERVER, varxml, "POST");   
 
 
function processResponce(value:XML):Void {
        var vr:String = value.firstChild.firstChild.nodeValue;
        // go up!
}


totruok 15.05.2009 03:31

У меня там всё же в функции есть что то я просто это вырезал для наглядности и структуру мне желательно такую же оставить, я попытался Ваш код переписать, всё равно не работает.

Код AS1/AS2:

getV = function (v1) {
//тоесть тут бла бла бла зависящий от v1 и влияющий на sendvar
                sendvar.sendAndLoad(SERVER, varxml, "POST");   
                varxml.onLoad  = function() {
                vr=varxml.firstChild.firstChild.nodeValue;
                        trace("Загрузил");
                }
                return vr;
        }


dimarik 15.05.2009 03:51

Ну не вернет getV ожидаемое значение! потому что varxml.firstChild.firstChild.nodeValue на момент начала загрузки не существует. Дождитесь окончания загрузки. потом и спрашивайте свой vr.


Код AS1/AS2:

function getV(v1):Void {
 
        //тоесть тут бла бла бла зависящий от v1 и влияющий на sendvar
 
        var app:Object = this;
 
        varxml.onLoad = function(success:Boolean) {
                if (success) {
                        trace("Загрузил");
                        app.processResponce(this);
                } else {
                        trace("Oooops!");
                }
 
        };
 
        sendvar.sendAndLoad(SERVER, varxml, "POST");   
}
 
function processResponce(value:XML):Void {
        var vr:String = value.firstChild.firstChild.nodeValue;
        // go up!
}


iNils 15.05.2009 03:52

Такая структура работать не будет.
Код:

getV = function (v1) {
//тоесть тут бла бла бла зависящий от v1 и влияющий на sendvar
        sendvar.sendAndLoad(SERVER, varxml, "POST");   
        varxml.onLoad  = function() {

                vr=varxml.firstChild.firstChild.nodeValue;
                trace("Загрузил");

        }
        return vr;
}

Сначала выполняется желтая часть, а потом, когда нибудь, голубая.
Как видите return vr находится в желтой части, а vr=varxml.firstChild.firstChild.nodeValue; в голубой, поэтому будете получать undefined

totruok 15.05.2009 04:05

А как в таком случае приостановить выполнение функции, пока не придёт ответ?


Часовой пояс GMT +4, время: 18:36.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.