Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.08.2011, 04:19
Интересующийся
Отправить личное сообщение для Smoker Посмотреть профиль Найти все сообщения от Smoker
 
Регистрация: 11.08.2011
Сообщений: 17

Получить объект из closure
this.getEvent = function()
{
    $.post('getEvent', {}, function(response)
    {
        // response
    }, 'json');

    // Как тут получить response?
}

Ну или как написать правильнее?

Использовать глобальные переменные я не хочу, писать нужный код прямо в этот callback я вроде не могу: я теряю возможность обращаться к методам/свойствам текущего объекта.
Ответить с цитированием
  #2 (permalink)  
Старый 20.08.2011, 04:33
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

вот ваш код пояснением:
this.getEvent = function()
{
    $.post('getEvent', {}, function(response)
    {
        // response
        // этот код выполнится ПЗЖЕ нижеследующего кода
    }, 'json');

    // Как тут получить response?
    // а никак. потому что этот код выоплнится РАНЬШЕ, чем код в колбеке
}

а вот, для того чтобы не потерять текущий контекст(не терять возможность обращаться к методам/свойствам текущего объекта)
надо писать зАмкание:
this.getEvent = function()
{
var _this = this;
(function(){
    $.post('getEvent', {}, function(response)
    {
        // response
        // Как тут получить response?
        //а он тут доступен. как и _this
    }, 'json');
})();
}
Ответить с цитированием
  #3 (permalink)  
Старый 20.08.2011, 04:37
Интересующийся
Отправить личное сообщение для Smoker Посмотреть профиль Найти все сообщения от Smoker
 
Регистрация: 11.08.2011
Сообщений: 17

Почему код в callback выполнится позже? Там какой-то setTimeout?

Так можно, да, только чё-то уродливо выглядит.

Последний раз редактировалось Smoker, 20.08.2011 в 04:39.
Ответить с цитированием
  #4 (permalink)  
Старый 20.08.2011, 04:41
Аватар для systemiv
Профессор
Отправить личное сообщение для systemiv Посмотреть профиль Найти все сообщения от systemiv
 
Регистрация: 19.08.2011
Сообщений: 186

Функция callback выполняется по факту получения какого либо ответа.
Ответить с цитированием
  #5 (permalink)  
Старый 20.08.2011, 04:42
Интересующийся
Отправить личное сообщение для Smoker Посмотреть профиль Найти все сообщения от Smoker
 
Регистрация: 11.08.2011
Сообщений: 17

Сообщение от systemiv Посмотреть сообщение
Функция callback выполняется по факту получения какого либо ответа.
Это понятно, но я так понял, что запрос выполняется не сразу.
Ответить с цитированием
  #6 (permalink)  
Старый 20.08.2011, 11:08
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от Smoker
запрос выполняется не сразу.
Запрос выполняется сразу, но глупо ждать его завершения, когда можно посчитать что-нибудь ещё.
Ответить с цитированием
  #7 (permalink)  
Старый 20.08.2011, 11:49
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от Smoker Посмотреть сообщение
Так можно, да, только чё-то уродливо выглядит.
полезней не найдешь. а что уродливо - хз хз. этот трюк использует большинство проггеров, для сохранения контекста
Ответить с цитированием
  #8 (permalink)  
Старый 20.08.2011, 12:07
Интересующийся
Отправить личное сообщение для Smoker Посмотреть профиль Найти все сообщения от Smoker
 
Регистрация: 11.08.2011
Сообщений: 17

Okay, спасибо.

P.S. Я имел в виду, что JS же однопоточный язык, я думал, что и с запросами так же. Получается, что сам запрос выполняется в отдельном потоке.
P.P.S. А, я кажется понял разницу асинхронного/синхронного запросов.

Последний раз редактировалось Smoker, 20.08.2011 в 12:10.
Ответить с цитированием
  #9 (permalink)  
Старый 25.08.2011, 06:51
Интересующийся
Отправить личное сообщение для Smoker Посмотреть профиль Найти все сообщения от Smoker
 
Регистрация: 11.08.2011
Сообщений: 17

BTW, более удобный способ представлен тут: http://habrahabr.ru/blogs/javascript/103760/ через apply и Function.prototype.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как из ссылки на объект получить родительский объект FINoM Общие вопросы Javascript 3 03.03.2011 16:27
Как получить объект getElementById через this Polkan Events/DOM/Window 7 24.06.2010 18:00
Можно ли получить объект без названия SunnyDay Общие вопросы Javascript 5 25.02.2010 19:26
Для события onCLick получить индекс строки и объект грида. progi2007 ExtJS 4 05.08.2009 11:31
Получить объект содержащий caller no_alex Общие вопросы Javascript 14 20.03.2009 21:37