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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Область видимости переменных 
:(
    Опции темы
SneG0K
Дата 24.5.2010, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

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



Код

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
PM WWW Skype   Вверх
Amphiluke
Дата 24.5.2010, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

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



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

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

PM   Вверх
SneG0K
Дата 24.5.2010, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

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



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

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

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

Добавлено через 3 минуты и 50 секунд
var result = callAPI('someapi', params);
Т.е. в result должен быть ответ.
PM WWW Skype   Вверх
Amphiluke
Дата 24.5.2010, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

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



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

Если асинхронность непринципиальна для вас, попробуйте синхронный запрос.
PM   Вверх
ex3c
Дата 24.5.2010, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



AJAX — Asynchronous Javascript and XML
PM MAIL   Вверх
Amphiluke
Дата 24.5.2010, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

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



Можно сделать так, чтобы функция callAPI сама принимала в качестве параметра указатель на callback-функцию, определенную пользователем вашего API. И тогда из функции onSuccess уже можно будет вызвать ту callback-функцию.
PM   Вверх
SneG0K
Дата 24.5.2010, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

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



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

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

Как бэ принципиально. Но всеравно спасибо за совет
PM WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




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


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

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