Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   $http возвращает не то, что нужно. (https://javascript.ru/forum/angular/44164-%24http-vozvrashhaet-ne-chto-nuzhno.html)

al-teen 09.01.2014 11:16

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

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


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


В чем проблема?

dolpheen 09.01.2014 11:27

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

al-teen 09.01.2014 11:33

Цитата:

Сообщение от dolpheen (Сообщение 291212)
В цепочке вызовов 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;
        }
    };
}])

jsru_ 09.01.2014 15:01

пропробуй в success
$http({method: 'GET', url: 'puth/vars&token=' + token}).
  success(function(data, status, headers, config) {
     console.log(data); 
  });

dolpheen 09.01.2014 16:23

Цитата:

Сообщение от al-teen (Сообщение 291213)
Можно пример? Или возможно существуют иные способы?

Сам $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;
});



Все примеры выше равнозначны по функциональности.

al-teen 09.01.2014 17:56

jsru_
Проблема не в этом. Внутри success все есть. Задача в том, чтобы присвоить переменной заначение data, для дальнейших операций за пределами success.

al-teen 09.01.2014 18:06

dolpheen
все 3 примера возвращают undefined за пределами функции

jsru_ 09.01.2014 18:08

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

FireVolkhov 13.01.2014 06:39

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


Часовой пояс GMT +3, время: 04:31.