Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Область видимости переменных


Автор: SneG0K 24.5.2010, 18:10
Код

callAPI = function(api, params) {
        var result = 1;
        var onSuccess = function(data) {
            result = 2;
        }

        var onError = function(xhr, status) {
            return false
        }
    
        $.ajax({
            url: url,
            data: {'api': api, 'params': params},
            dataType: 'text',
            type: 'post',
            cache: false,
            success: onSuccess,
            error: onError
        });
        alert( result );
    }

Почему result не меняется на 2??? Она же в глобальной области видимости!!! 
Битый час уже долблюсь. Спасайте.
Firefox 3.6.3 Ubuntu 10.04

Автор: Amphiluke 24.5.2010, 18:29
А почему проверка 
Цитата(SneG0K @  24.5.2010,  22:10 Найти цитируемый пост)
alert( result );

выполняется, вне функции onSuccess? (т.е. не дожидаясь ответа от сервера) user posted image

Автор: SneG0K 24.5.2010, 18:38
Внутри функции проверка выполнялась и там все хорошо. 
Т.е. это из-за задержек сервера?

Добавлено через 10 секунд
Стоп. Как это решить?

Добавлено через 3 минуты и 10 секунд
Моя задача: вызвать опр. API, получить результат, вернуть его.

Добавлено через 3 минуты и 50 секунд
var result = callAPI('someapi', params);
Т.е. в result должен быть ответ.

Автор: Amphiluke 24.5.2010, 18:48
Ну вы же создаете асинхронный запрос. После возврата управления функцией callAPI запрос еще не будет до конца обработан, и соответственно не будет еще возвращен ответ. Только после срабатывания callback-функции onSuccess будет изменена переменная result...

Если асинхронность непринципиальна для вас, попробуйте синхронный запрос.

Автор: ex3c 24.5.2010, 18:49
AJAX — Asynchronous Javascript and XML

Автор: Amphiluke 24.5.2010, 18:52
Можно сделать так, чтобы функция callAPI сама принимала в качестве параметра указатель на callback-функцию, определенную пользователем вашего API. И тогда из функции onSuccess уже можно будет вызвать ту callback-функцию.

Автор: SneG0K 24.5.2010, 19:06
Цитата(ex3c @  24.5.2010,  17:49 Найти цитируемый пост)
AJAX — Asynchronous Javascript and XML 

Гениально smile 
Amphiluke, спасибо. так и сделал.
Цитата(Amphiluke @  24.5.2010,  17:48 Найти цитируемый пост)
Если асинхронность непринципиальна для вас, попробуйте синхронный запрос. 

Как бэ принципиально. Но всеравно спасибо за совет

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)