Асинхронный Ajax-запрос (заполнение формы) jQuery (onClick работает, onReady не работает)

#ajax #jquery

#ajax #jquery

Вопрос:

У меня есть следующая функция, которая отлично работает при привязке к событию onClick().. Однако, если событие запускается onReady(), оно не выполняет свою работу .. Добавление alert() в любой момент метода позволяет ему работать нормально.. Итак, я знаю, что это связано с асинхронным AJAX-запросом. Мне просто не повезло успешно добавить логику отложенного или обратного вызова .. не уверен, как к этому подойти.

Существует ли простой способ улучшить метод? В конечном итоге я вызываю этот метод onOpen() для диалога jQueryUI.. Но диалоговое окно запускается и становится пустым..

 function performElqLookups(formName) {
    var elqTracker = new jQuery.elq(459);
    //first do the visitor lookup
    var visitorLookup = 'ba109a0a75294aed95ca72b0bc3b345d';
    elqTracker.getData({ key: visitorLookup, lookup: "", success: function() {
        //then check for an email address on the visitor record and do a contact data lookup if there is one
        if (typeof GetElqContentPersonalizationValue == "function") {
            var email = GetElqContentPersonalizationValue("V_ElqEmailAddress");
                if (email != "") {
                    var contactLookup = 'c7e9dd7150464162af6fe1cf471627e5';
                    elqTracker.getData({ key: contactLookup, lookup: "<C_EmailAddress>"   email   "</C_EmailAddress>", success: function() {
                        populateForm(formName);
                        trackPage().done(function( guid ) {
                            $('#elqCustomerGUID').val(guid);
                        });
                    }});
                }
        }
    }});
}
  

Ответ №1:

вы можете установить Ajax на синхронный, перейдя async:false к любым вызовам ajax, таким как get() load() и ajax()

кроме того, помните, что вы всегда должны завершать свой код с $(function(){..code in here..}) помощью, потому что это сокращение для document.onReady

Комментарии:

1. В этом случае эти вызовы выполняются во внешних сценариях (поэтому у меня нет возможности настроить запрос .. есть другие предложения?)

2. вы хотите сказать, что это было бы невозможно сделать? elqTracker.getData({ key: visitorLookup, lookup: "", async: false,success: function() {...

3. Да; Я так считаю .. Поскольку getData() в данном случае в методе, определенном извне.. Я не верю, что он будет принимать или уважать асинхронный параметр .. т.е. code.google.com/p/eloqua-tracking/wiki/DataLookups

4. используете ли вы firebug или инструменты разработчика Chrome? это выдаст сообщение об ошибке и сообщит вам содержимое и статус любых ajax-запросов