Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.08.2011, 15:20
Новичок на форуме
Отправить личное сообщение для stuff Посмотреть профиль Найти все сообщения от stuff
 
Регистрация: 01.08.2011
Сообщений: 6

последовательность функций
добрый день. необходимо выполнить несколько функций последовательно. одна за другой.
при
f1();
f2();
f3();
...

выполняется только первая. если вставить между ними alert`ы - все работает. но для меня это не выход. подскажите, пожалуйста, решение
Ответить с цитированием
  #2 (permalink)  
Старый 01.08.2011, 15:38
Профессор
Отправить личное сообщение для ваый Посмотреть профиль Найти все сообщения от ваый
 
Регистрация: 29.06.2011
Сообщений: 445

что внутри?
Ответить с цитированием
  #3 (permalink)  
Старый 01.08.2011, 15:50
Новичок на форуме
Отправить личное сообщение для stuff Посмотреть профиль Найти все сообщения от stuff
 
Регистрация: 01.08.2011
Сообщений: 6

var Billing = Class.create();
Billing.prototype = {
    initialize: function(form, addressUrl, saveUrl){
        this.form = form;
        if ($(this.form)) {
            $(this.form).observe('submit', function(event){this.save();Event.stop(event);}.bind(this));
        }
        this.addressUrl = addressUrl;
        this.saveUrl = saveUrl;
        this.onAddressLoad = this.fillForm.bindAsEventListener(this);
        this.onSave = this.nextStep.bindAsEventListener(this);
        this.onComplete = this.resetLoadWaiting.bindAsEventListener(this);
    },

    setAddress: function(addressId){
        if (addressId) {
            request = new Ajax.Request(
                this.addressUrl+addressId,
                {method:'get', onSuccess: this.onAddressLoad, onFailure: checkout.ajaxFailure.bind(checkout)}
            );
        }
        else {
            this.fillForm(false);
        }
    },

    newAddress: function(isNew){
        if (isNew) {
            this.resetSelectedAddress();
            Element.show('billing-new-address-form');
        } else {
            Element.hide('billing-new-address-form');
        }
    },

    resetSelectedAddress: function(){
        var selectElement = $('billing-address-select')
        if (selectElement) {
            selectElement.value='';
        }
    },

    fillForm: function(transport){
        var elementValues = {};
        if (transport && transport.responseText){
            try{
                elementValues = eval('(' + transport.responseText + ')');
            }
            catch (e) {
                elementValues = {};
            }
        }
        else{
            this.resetSelectedAddress();
        }
        arrElements = Form.getElements(this.form);
        for (var elemIndex in arrElements) {
            if (arrElements[elemIndex].id) {
                var fieldName = arrElements[elemIndex].id.replace(/^billing:/, '');
                arrElements[elemIndex].value = elementValues[fieldName] ? elementValues[fieldName] : '';
                if (fieldName == 'country_id' && billingForm){
                    billingForm.elementChildLoad(arrElements[elemIndex]);
                }
            }
        }
    },

    setUseForShipping: function(flag) {
        $('shipping:same_as_billing').checked = flag;
    },

    save: function(){
        if (checkout.loadWaiting!=false) return;

        var validator = new Validation(this.form);
        if (validator.validate()) {
            checkout.setLoadWaiting('billing');

            var request = new Ajax.Request(
                this.saveUrl,
                {
                    method: 'post',
                    onComplete: this.onComplete,
                    onSuccess: this.onSave,
                    onFailure: checkout.ajaxFailure.bind(checkout),
                    parameters: Form.serialize(this.form)
                }
            );
        }
    },

    resetLoadWaiting: function(transport){
        checkout.setLoadWaiting(false);
    },

    nextStep: function(transport){
        if (transport && transport.responseText){
            try{
                response = eval('(' + transport.responseText + ')');
            }
            catch (e) {
                response = {};
            }
        }

        if (response.error){
            if ((typeof response.message) == 'string') {
                //alert(response.message);
            } else {
                if (window.billingRegionUpdater) {
                    billingRegionUpdater.update();
                }
                //alert(response.message.join("\n"));
            }

            return false;
        }

        checkout.setStepResponse(response);
        payment.initWhatIsCvvListeners();
    }
}

в данном случае вызывается billing.save()
остальные классы с аналогичными функциями
Ответить с цитированием
  #4 (permalink)  
Старый 01.08.2011, 15:54
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

AJAX на то и AJAX, что он асинхронный. Если Вам нужно дождаться выполнения предыдущего запроса, используйте либо синхронный запрос, либо посылайте следующий после завершения предыдущего (т.е. в callback'е)
Ответить с цитированием
  #5 (permalink)  
Старый 01.08.2011, 15:56
Профессор
Отправить личное сообщение для ваый Посмотреть профиль Найти все сообщения от ваый
 
Регистрация: 29.06.2011
Сообщений: 445

Сообщение от stuff
если вставить между ними alert`ы - все работает
Возможно, дело задержке, обусловленной асинхронным характером каких-то запросов.
Ответить с цитированием
  #6 (permalink)  
Старый 01.08.2011, 16:01
Новичок на форуме
Отправить личное сообщение для stuff Посмотреть профиль Найти все сообщения от stuff
 
Регистрация: 01.08.2011
Сообщений: 6

Сообщение от B@rmaley.e><e Посмотреть сообщение
AJAX на то и AJAX, что он асинхронный. Если Вам нужно дождаться выполнения предыдущего запроса, используйте либо синхронный запрос, либо посылайте следующий после завершения предыдущего (т.е. в callback'е)
ума не приложу как вызвать через коллбеки 5 функций
Сообщение от ваый Посмотреть сообщение
Возможно, дело задержке, обусловленной асинхронным характером каких-то запросов.
видимо, так и есть. а не подскажите, как это лечится?
Ответить с цитированием
  #7 (permalink)  
Старый 01.08.2011, 16:36
Профессор
Отправить личное сообщение для ваый Посмотреть профиль Найти все сообщения от ваый
 
Регистрация: 29.06.2011
Сообщений: 445

Как лечится? Выше ответили, как, в #4.
Ответить с цитированием
  #8 (permalink)  
Старый 01.08.2011, 16:44
Новичок на форуме
Отправить личное сообщение для stuff Посмотреть профиль Найти все сообщения от stuff
 
Регистрация: 01.08.2011
Сообщений: 6

если бы я был гуру js то, очевидно, въехал бы о чем речь. поскольку это не так - прошу помощи
Ответить с цитированием
  #9 (permalink)  
Старый 01.08.2011, 16:52
Профессор
Отправить личное сообщение для розовый слоник Посмотреть профиль Найти все сообщения от розовый слоник
 
Регистрация: 17.10.2009
Сообщений: 258

прикольно)
или код писало 2а человека или один но в разное время с разным настроением
по окончанию выполнения запроса приходит ответ это и есть момент когда вы можете выполнить свои 5ть функций. не поленитесь по почитай те про ajax) больше прочтете быстрее станете гуру.

З.Ы.
хорошая книга если вы даже не представляете что такое ajax - Изучаем Ajax Бретт Маклафлин
я начинал знакомство именно с нее

Последний раз редактировалось розовый слоник, 01.08.2011 в 16:54.
Ответить с цитированием
  #10 (permalink)  
Старый 01.08.2011, 17:02
Профессор
Отправить личное сообщение для ваый Посмотреть профиль Найти все сообщения от ваый
 
Регистрация: 29.06.2011
Сообщений: 445

Что находится в методе this.onSave, который выполняется в качестве колобка?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов функций iframe из кода Firefox-расширения Jury Firefox/Mozilla 0 03.05.2011 13:09
Поведение в IE функций hide('slow'), slideToggle(), etc re3443 jQuery 0 23.03.2011 14:16
Последовательность выполнения функций nematod Общие вопросы Javascript 7 25.02.2011 03:16
Как получить список пользовательских функций объекта window? Маэстро Events/DOM/Window 13 03.07.2010 13:20
Можно ли как для произвольного массива создавать вызовы функций , имеющих на входе kefi Общие вопросы Javascript 3 17.04.2009 16:53