Форум 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=172802)

develops 17.12.2011 14:21

Подскажите ошибку в методе SendAndLoad класса LoadVars
 
Вложений: 1
Нажатием по кнопке, вызываю клас. Получить хочу пропарсеный масив, но не отдает.
Trace выводит, а returnОМ не могу. С класами недавно, поэтому где нибудь ошибка в вызове функции, прошу Вашей помощи.

Вызов по кнопке:

Код AS1/AS2:

btn.onRelease = function()
{
trace(getLink.getLinks("http://korrespondent.net/"));
}

Сам клас:

Код AS1/AS2:

class getLink
{
 
        public var links:String;
        public var my_array:Array;
 
                static function getLinks(url:String):Void
                {
 
                var lvSend:LoadVars = new LoadVars();
                var lvReceive:LoadVars = new LoadVars();
                lvSend.sendAndLoad(url, lvReceive, "POST");
                //return url;
 
 
                lvReceive.onData = function(data):Array{
 
                        if (data == null)
                        {
                        trace("error");
                        return null;       
                        }
                        else
                        {       
 
                        links = unescape(data);
 
                        var arr_end = [];
                        var my_array = links.split("<li>");
 
                        for (var i = 0; i<my_array.length; i++) {
                        my_array[i] = (my_array[i].slice((my_array[i].indexOf('http')), (my_array[i].indexOf('/'))));
                        }
                        //trace(my_array);  //Здесь возвращает- то что нужно, но не в return
                        return my_array;
 
                        }
                };
 
        }
}

Файл прикрепил. Заранее благодарю.





P.S. Чисто терминологичекая ошибка.
Вот, если сделать возврат из первой функции- вернет прекрасно url, например:


Код AS1/AS2:

class getLink
{
 
 
                static function getLinks(url:String):String
                {
 
                var lvSend:LoadVars = new LoadVars();
                var lvReceive:LoadVars = new LoadVars();
                lvSend.sendAndLoad(url, lvReceive, "POST");
                return url;  //возвратить url, который мы передали.
                };
 
}

А результат POST запроса от lvReceive.onData- не пойму как принять:

dark256 17.12.2011 15:59

Извините, а можно в двух словах описать, что именно вы планируете получить по данной ссылке?

develops 17.12.2011 16:29

да нет, ссылка как наглядный пример post запроса для получения html страницы. Ну а дальнейший парсинг- это само собой разумеется.

dark256 17.12.2011 16:39

ссылка отдается. файл с пустотй приходит. парсится оно также в пустоту, вот undefined вы и получаете

Ну и к тому же .onData - возникает как только данные стали поступать.
Надо использовть .onLoad - когда получены.

Далее. trace выдает вам нулевой отсутствующий ответ от getLinks(), а не по факту свершившегося события .onData или .onLoad.

Соотв. переписываем примерно так:

Код AS1/AS2:

getLink.getLinks("http://korrespondent.net/", callBack )
 
function callBack( DAT ){
        trace( "DATA PARSED:"+DAT );
}

Код AS1/AS2:

class getLink
{
 
        public var links:String;
 
 
        static function getLinks(url:String, callBack ):Void
        {
 
                var lvSend:LoadVars = new LoadVars();
                var lvReceive:LoadVars = new LoadVars();
                lvSend.sendAndLoad(url, lvReceive, "POST");
 
                lvReceive.onLoad = function( data ){
 
                        trace( "DATA RECEIVED" );
 
                        if (data == null) {
                                trace("error");
                                return null;
                        }
                        else{
                                links = unescape(data);                               
                                var arr_end = [];
                                var my_array = links.split("<li>");
 
                                for (var i = 0; i<my_array.length; i++){
                                        my_array[i] = (my_array[i].slice((my_array[i].indexOf('http')), (my_array[i].indexOf('/'))));
                                }                               
                                callBack ( my_array )
                        }
                }
 
        }
}


develops 17.12.2011 17:52

Сенкс, добрый человечек!
Уловил суть, что требовалось ))
Чет я не сообразил вызвать функцию с передачей ей этого ж самого масива.

Вот только по поводу onLoad/onData.
Все же- onLoad, мне в данный момент- возвращает :Boolean, т.е. true.
А вот, при замене на onData, возвращает данные из post.
Но и вправду- при разных скоростях инета- String из запроса, будет разный, т.к. нет полной загрузке при onData.

dark256 17.12.2011 18:16

onData - глючит безбожно. По сути это НАЧАЛО поступления данных, а не факт их окончания получения.
Соотв тут либо шаманить надо, либо даже и не знаю.
Я не смог нормально пользоваться этим событием. В общем случае - файл получаю либо пустой, либо полузагруженный.

Далее. Вы грузите не СКРИПТ, а САЙТ - что он там вам отдает - неизвестно в общем случае :)
В нисфере там мильон всяких файлов по ссылке отдается. Выберите какой-нть более простой и явный пример для загрузки :)


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

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