Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> prototype Ajax.Request вопрос, дождаться выполнения onSucces в функции 
:(
    Опции темы
TroRg
Дата 29.1.2008, 06:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 29.1.2008

Репутация: нет
Всего: нет



Приветствую, возник такой вот вопрос:
prototype.js Ajax.Request

Код

Test.Util.wait=function(ms){
    var date = new Date();
    var curDate = null;
    do {
        curDate = new Date();
    }while(curDate-date < ms);
    return
}


Код


Test.aBackend=function(){
    this.url    = "http://localhost/aBackend/";
    this.canReturn = false;
}

Test.aBackend.prototype={
    getItems:function(){
        var items = null;
        var myAjax = new Ajax.Request(
                this.url,
                {
                    method:'post',
                    asynchronous:'false',
                    onSuccess:function(request){
                        items = eval(request.responseText);
                        this.canReturn = true;
                    }.bind(this)
                }
        );
        /*
            В этом случае скрипт уходит в бесконечный цикл
            while (this.canReturn==false){
                Test.Util.wait(1000);
            }
        */
        return items;
    }
}


как бы дождаться заполнения переменной items и вернуть ее из функции getItems?


PM MAIL   Вверх
Dr.Zlo
Дата 2.2.2008, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 12.11.2007

Репутация: 1
Всего: 2



Если твоё понимание философии Дзен позволяет тебе пользоваться глобальными переменными, я бы посоветовал заменить this.canReturn на глобальную переменную, определить её до вызова функции как ajax_flag = false, далее присваивать ей true когда ответ от сервера получен и ловить это в ожидающем скрипте. В твоём случае скорее всего ошибка в разной трактовке this в двух частях скрипта, хотя я вообще не доверяю ни прототиповскому, ни джейкьюиревскому аяксу и использую свою функцию. Слишком уж часто библиотечный аякс ведёт себя плохо. Кстати, ты проверял, onSuccess вообще выполняется?
PM MAIL   Вверх
TroRg
Дата 2.2.2008, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 29.1.2008

Репутация: нет
Всего: нет



да, выполняется, но return items; получается пустым, ибо возврат из функции получился быстрее того как пришли данные запроса.
пока решил так,просто немного не устраивает такая вот конструкция с сигналами:

Код

Test.aBackend.prototype={
    getItems:function(){
        var items = null;
        var myAjax = new Ajax.Request(
                this.url,
                {
                    method:'post',
                    asynchronous:'false',
                    onSuccess:function(request){
                        this.items = eval(request.responseText);
                        MochiKit.Signal.signal(this,"oninitiated");
                    }.bind(this)
                }
        );
    }
}


Код

Test.aManager=function(){
    this.m_aControl = null;
    this.m_backAdapter = new Test.aBackend();
    MochiKit.Signal.connect(this.m_backAdapter, "oninitiated", MochiKit.Base.method(this, function()
                                                                                         {
                                                                                             this.init();
                                                                                         })
    );

    this.m_backAdapter.getItems();
    this.m_Items = new Array();
}

Test.aManager.prototype={
    init:function(){
        //тут я уже точно выдеру нужное из Test.aBackend.items
    }
}


кажется куда красивей было бы var lalala = Test.aBackend.getItems();
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Применение библиотек | Следующая тема »


 




[ Время генерации скрипта: 0.0956 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.