2015-02-03 2 views
0

Я использую Угловой HTTP-ресурс для получения некоторых данных из API. Метод API на самом деле является PUT, но возвращает массив данных. (Заметьте, это не мой API)AngularJS HTTP Resource - Respos Function Undefined

Он отлично выполняет HTTP-вызов, и я вижу в Сети инструменты для разработчиков Google, мой ответ прав. Тем не менее, я продолжаю получать «TypeError: undefined не является функцией» при попытке работать с данными ответа.

Вот некоторые из различных методов, которые я пробовал, и каждый из них дает тот же TypeError:

HTTP Ресурс

.factory('Sports', ['$resource', 'SPORTS_CONFIG', 
    function($resource, SPORTS_CONFIG) { 
     return $resource(SPORTS_CONFIG.URL, {}, { 
      get: { 
       method: 'PUT', 
       isArray: true 
      } 
     }); 
    } 
]) 

Угловая JS Попытки

// Construct Sports Body 
var s = new Sports($scope.sport); 

// Attempt 1 
s.$get({}, function(data){ 

}); 

// Attempt 2 
s.$get({}).then(function(data){ 

}); 

// Attempt 3 
s.$get({}).$promise.then(data){ 

}); 

EDIT

После просмотра моего кода ошибки, похоже, что ошибка возникает в 'isArray' в моем HTTP-ресурсе. Когда я устанавливаю isArray в false, это ошибки, потому что он ожидает объект, но получает массив. Когда я сохраняю это правду, это ошибки и говорит TypeError: undefined не является функцией. Когда я нажимаю на строку javascript, это isArray.

ВТОРОЙ EDIT

Я получил его на работу, используя следующий код:

$scope.teams = Sports.get($scope.sport); 

Однако $ scope.teams = [0, $ обещание, $ решены]. Как я могу получить только [0] вместо $ обещания и $ решены?

+1

Вы пробовали S $ получить() успех (функция (данные, статус. заголовки, config) { }); ? – satchcoder

+0

Я добавил, что такое s, ресурс $ http и обновление местоположения ошибки. Не могли бы вы увидеть изменения. –

+0

Можете ли вы сказать нам, какой ответ «PUT» вы получаете? –

ответ

0

аргумент вашей функции then должен быть функцией.

например:

s.$get({}).then(function (data){ 

}); 
+0

Я добавил, что такое s, ресурс $ http и обновление местоположения ошибки. Не могли бы вы увидеть изменения. –

+0

См. Новое редактирование. –

0

Ваш синтаксис выглядит так, следовать этому подходу вместо:

$http.get('/someurl').then(function(response) { 
     //do something with response.data; 
     }, function(errResponse) { 
     console.error('Error while fetching data'); 
     }); 

Как вы можете видеть, вы должны передать в функцию, которая проходит в ответ от сервера, и затем вы можете получить данные.

+0

Я добавил, что такое s, ресурс $ http и обновление местоположения ошибки. Не могли бы вы увидеть изменения. –

+0

См. Новое редактирование. –

0

Вы можете попробовать что-то вроде этого (с функцией)

$http({ 
     method : "GET", 
     url : "your_url" 
    }).success(function(data, status, headers, config) { 
     $scope.yourVariable= data; 
    }).error(function(data, status, headers, config) { 
     alert("Request failed. HTTP status:" + status); 
    }); 
+0

Я добавил, что такое s, ресурс $ http и обновление местоположения ошибки. Не могли бы вы увидеть изменения. –

+0

См. Новое редактирование. –

0

В связи с выше редактирования, этот ответ стал устаревшим.

Как я не могу комментировать прямо сейчас, способ получить только первый пункт, как вы хотели бы просто:. $scope.teams = Sports.get($scope.sport)[0];

+0

Я добавил, что такое s, ресурс $ http и обновление местоположения ошибки. Не могли бы вы увидеть изменения. –

+0

См. Новое редактирование. –

Смежные вопросы