Ошибка с $ http.get в angularJS – Успех не является функцией
Получение этой ошибки:
angule.min.js: 122 TypeError: $ http.get (…). Успех не является функцией в getUserInfo (app.js: 7) в new (app.js: 12) в Object.invoke (angular.min .js: 43) при Q.instance (угловой.min.js: 93) при p (угловой.min.js: 68) при g (угловой.min.js: 60) при g (угловой.min.js: 61 ) в точке g (угловой.min.js: 61) при угловом.min.js: 60 при угловом.min.js: 21
Вот мой код:
- Использование ng-src vs src
- Как можно решить npm UNEPT PEER DEPENDENCY?
- Цепочка Ajax вызывает в AngularJs
- Почему устаревшие / ошибки метода AngularJS $ http не рекомендуются? Удалено из v1.6?
- Не удается добраться до $ rootScope
var gitHub = angular.module('gitHub', []); gitHub.controller('mainController', ['$scope', '$http', function($scope, $http) { var $scope.user = ''; function getUserInfo($scope, $http){ $http.get('https://api.github.com/users') .success(function (result) { $scope.user = result; console.log(result); }); }; getUserInfo($scope, $http); }]);
и вот html
Github Users Directory GitHub Users
Who do you want to search for? {{ user }}
- Услуги «Namespacing» в AngularJS
- Как отправить данные в виде данных формы вместо полезной нагрузки запроса?
- Как вернуть изображение из $ http.get в AngularJS
- Когда в пользу ng-if vs. ng-show / ng-hide?
- Удаление идентификатора fragmentа из URL-адресов AngularJS (символ #)
- Что такое `priority` директивы ng-repeat, можете ли вы его изменить?
- небезопасная ссылка в угловом
- Миграция AngularJS в Angular 4,5 (с DEMO)
.success
и .error
устарели и удалены из AngularJS 1.6 . Вместо этого используйте стандартный метод .then
.
$http.get('https://api.github.com/users') .then(function (response) { var data = response.data; var status = response.status; var statusText = response.statusText; var headers = response.headers; var config = response.config; $scope.user = data; console.log(data); });
Уведомление об изъятии
Методы обещания
$http
legacy.success
и.error
устарели и будут удалены в версии 1.6. Вместо этого используйте стандартный метод.then
.– AngularJS (v1.5) $ http Service API Reference – Уведомление об изъятии .
Также см. SO: Почему угловые $ http-методы успеха / ошибки устарели? ,
Я думаю, вам нужно использовать .then, а не .success при использовании углового .
Пример из документа
var promise = asyncGreet('Robin Hood'); promise.then(function(greeting) { alert('Success: ' + greeting); }, function(reason) { alert('Failed: ' + reason); }, function(update) { alert('Got notification: ' + update); });
Вот пример того, как $ Http использует его:
// Simple GET request example: $http({ method: 'GET', url: '/someUrl' }).then(function successCallback(response) { // this callback will be called asynchronously // when the response is available }, function errorCallback(response) { // called asynchronously if an error occurs // or server returns response with an error status. });
И, наконец, ваш код может выглядеть так
$scope.getUserInfo = function () { $http.get('https://api.github.com/users') .then(function (result) { $scope.user = result; console.log(result); }, function(result) { //some error console.log(result); }); };
Согласно вашей текущей реализации, вы не передаете аргументы (т.е. $scope
и $http
) в getUserInfo
из ng-click="getUserInfo()"
таким образом, вы получаете ошибку.
Вам не нужно передавать их как аргументы как $scope
и $http
как он уже введен в controller и определяет функцию в $scope
.
gitHub.controller('mainController', ['$scope', '$http', function($scope, $http) { $scope.user = ''; //Redefined function, without arguments $scope.getUserInfo = function (){ $http.get('https://api.github.com/users') .success(function (result) { $scope.user = result; console.log(result); }); }; $scope.getUserInfo(); }]);
это работает
https://docs.angularjs.org/api/ng/service/$http
// Simple GET request example: $http({ method: 'GET', url: '/someUrl' }).then(function successCallback(response) { // this callback will be called asynchronously // when the response is available }, function errorCallback(response) { // called asynchronously if an error occurs // or server returns response with an error status. });
Не нужно передавать $ http в качестве параметра функции, так как вы уже ввели $ http в качестве зависимости от вашего controllerа. Я внесла некоторые изменения в код. Пожалуйста, проверьте, что все будет хорошо.
var gitHub = angular.module('gitHub', []); gitHub.controller('mainController', ['$scope', '$http', function ($scope, $http) { $scope.user = ''; $scope.getUserInfo = function() { $http.get('https://api.github.com/users') .success(function (result) { $scope.user = result; console.log(result); }); }; $scope.getUserInfo(); }]);
Вам не нужно вводить $ scope, $ http ..
app.controller('MainController', function($scope, $http) { $scope.fetchData = function(_city){ $http.get("../api/AllPlaces?filter[where][placeCity]="+ _city) .then(function(response) { $scope.Data = response.data; }); } });
function successCallback(response) { return response } $http.get('url') .then(successCallback)
Согласно документации Angular JS $http
, эта система была исключена из 1.4.3 +
Итак, я получил помощь от его поста, и вы можете попробовать таким образом
app.controller('MainCtrl', function ($scope, $http){ $http({ method: 'GET', url: 'api/url-api' }).then(function (success){ },function (error){ }); }
ИЛИ
$http.get('api/url-api').then(successCallback, errorCallback); function successCallback(response){ //success code } function errorCallback(error){ //error code }
Я предпочитаю второй, который был более гибким для меня.
$http({ method: 'GET', url: '....', headers: { 'Authorization': 'Bearer ' + localStorage["token"] } }) .then(function (data, status, headers, config) { alert(JSON.stringify(data) + "Status" + status); }) .error(function (data, status, headers, config) { alert(JSON.stringify(data) + "Status" + status); });