Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.01.2014, 11:16
Новичок на форуме
Отправить личное сообщение для al-teen Посмотреть профиль Найти все сообщения от al-teen
 
Регистрация: 09.04.2013
Сообщений: 9

$http возвращает не то, что нужно.
Доброго времени.
Пытаюсь получить данные через $http.get.

Код выглядит так:
var users = $http.get('http://puth.com').then(function(response) { 
    return response.data;
});


Но вместо результата выборки получаю:
Object { then=function(), catch=function(), finally=function()}


В чем проблема?
Ответить с цитированием
  #2 (permalink)  
Старый 09.01.2014, 11:27
Аватар для dolpheen
Интересующийся
Отправить личное сообщение для dolpheen Посмотреть профиль Найти все сообщения от dolpheen
 
Регистрация: 04.01.2014
Сообщений: 14

В цепочке вызовов get->then и т.д., передается объект promise, соответственно он и возвращается в users.
Данные необходимо присваивать в самой функции -
users = response.data
Ответить с цитированием
  #3 (permalink)  
Старый 09.01.2014, 11:33
Новичок на форуме
Отправить личное сообщение для al-teen Посмотреть профиль Найти все сообщения от al-teen
 
Регистрация: 09.04.2013
Сообщений: 9

Сообщение от dolpheen Посмотреть сообщение
В цепочке вызовов get->then и т.д., передается объект promise, соответственно он и возвращается в users.
Данные необходимо присваивать в самой функции -
users = response.data
Можно пример? Или возможно существуют иные способы?

пробовал другие варианты, но результат тот же
.factory('getVars', ['$http','$q', function($http, $q) {
    var items = {};
    var last_request_failed = true;
    var promise = undefined;

    return {
        getItems: function(token) {
            if(!promise || last_request_failed) {
                promise = $http.get('puth/vars&token=' + token).then(function(response) {
                    last_request_failed = false;
                    items = response.data;
                    return items;
                },function(response) {  // error
                    last_request_failed = true;
                    return $q.reject(response);
                });
            }
			
            return promise;
        }
    };
}])
Ответить с цитированием
  #4 (permalink)  
Старый 09.01.2014, 15:01
Аватар для jsru_
Кандидат Javascript-наук
Отправить личное сообщение для jsru_ Посмотреть профиль Найти все сообщения от jsru_
 
Регистрация: 09.04.2013
Сообщений: 149

пропробуй в success
$http({method: 'GET', url: 'puth/vars&token=' + token}).
  success(function(data, status, headers, config) {
     console.log(data); 
  });
Ответить с цитированием
  #5 (permalink)  
Старый 09.01.2014, 16:23
Аватар для dolpheen
Интересующийся
Отправить личное сообщение для dolpheen Посмотреть профиль Найти все сообщения от dolpheen
 
Регистрация: 04.01.2014
Сообщений: 14

Сообщение от al-teen Посмотреть сообщение
Можно пример? Или возможно существуют иные способы?
Сам $http возвращает объект Promise (а не данные).
С полученными от после запроса данными необходимо оперировать в методе then или success (который по сути, тот же then, но на вход подаются уже "разбитые" по параметрам данные запроса).
Т.е.

var users,
userPromise = $http.get('http://puth.com');

userPromise.then(function(response) {
    users = response.data;
});

или
var users;
$http.get('http://puth.com').then(function(response) {
    users = response.data;
});

или, наподобие примера выше, в комменте.
var users;
$http.get('http://puth.com').success(function(data) {
    users = data;
});



Все примеры выше равнозначны по функциональности.
Ответить с цитированием
  #6 (permalink)  
Старый 09.01.2014, 17:56
Новичок на форуме
Отправить личное сообщение для al-teen Посмотреть профиль Найти все сообщения от al-teen
 
Регистрация: 09.04.2013
Сообщений: 9

jsru_
Проблема не в этом. Внутри success все есть. Задача в том, чтобы присвоить переменной заначение data, для дальнейших операций за пределами success.
Ответить с цитированием
  #7 (permalink)  
Старый 09.01.2014, 18:06
Новичок на форуме
Отправить личное сообщение для al-teen Посмотреть профиль Найти все сообщения от al-teen
 
Регистрация: 09.04.2013
Сообщений: 9

dolpheen
все 3 примера возвращают undefined за пределами функции
Ответить с цитированием
  #8 (permalink)  
Старый 09.01.2014, 18:08
Аватар для jsru_
Кандидат Javascript-наук
Отправить личное сообщение для jsru_ Посмотреть профиль Найти все сообщения от jsru_
 
Регистрация: 09.04.2013
Сообщений: 149

al-teen,
ты должен помнить что данные в аякс запросе не пришли на время выполнения скрипта!
это проблема любого аякс запроса, вот вообщем-то, на мой взгляд, нормальный ответ на твой вопрос
http://stackoverflow.com/a/14220323/2560165

Последний раз редактировалось jsru_, 09.01.2014 в 18:11.
Ответить с цитированием
  #9 (permalink)  
Старый 13.01.2014, 06:39
Аватар для FireVolkhov
Аспирант
Отправить личное сообщение для FireVolkhov Посмотреть профиль Найти все сообщения от FireVolkhov
 
Регистрация: 17.04.2013
Сообщений: 88

var users = [];
$http.get('http://puth.com').then( function( response ){
    angular.extend( users, response.data );
} );

Последний раз редактировалось FireVolkhov, 13.01.2014 в 07:09.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Баги Opera пишем сюда devote Оффтопик 101 08.08.2013 05:56
Куда делась тема про МММ? beard Оффтопик 67 12.07.2012 21:06
фрактальный сыр x-yuri Оффтопик 76 23.11.2011 21:59
О фрилансе (Личный опыт) free Оффтопик 105 18.08.2011 17:02
Нужно что бы слайдер прокручивался по кругу sembler jQuery 0 29.06.2011 17:39