Obtenir cette erreur:
angular.min.js: 122 TypeError: $ http.get (...). success n'est pas une fonction à getUserInfo (app.js: 7) at new (app.js: 12) sur Object.invoke (angular.min.js: 43) at Q.instance (angular.min.js: 93) en p (angular.min.js: 68) en g (angular.min.js: 60) en g (angular.min.js: 61) en g (angular.min.js: 61) à angular.min.js: 60 à angular.min.js: 21
Voici mon code:
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);
}]);
et voici le html
<!DOCTYPE html>
<html ng-app="gitHub">
<head>
<title>Github Users Directory</title>
<script src="angular.min.js"></script>
<script src="app.js"></script>
</head>
<body>
<div ng-controller="mainController">
<div>
<h1>GitHub Users</h1>
Who do you want to search for?<input type="text" name="FindHim" ng-model="queryName" />
<button ng-click="getUserInfo()">Search</button>
</div>
<div>
{{ user }}
</div>
</div>
</body>
</html>
Les méthodes .success
et .error
sont obsolètes et ont été supprimées de AngularJS 1.6 . Utilisez plutôt la méthode .then
standard.
$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);
});
Avis de dépréciation
Les anciennes méthodes de promesse
$http
.success
et.error
sont obsolètes et seront supprimées à partir de la version 1.6.0. Utilisez plutôt la méthode.then
standard.- AngularJS (v1.5) Référence de l'API de service $ http - Avis de dépréciation .
Voir aussi SO: Pourquoi les méthodes de réussite/erreur $ http angulaires sont-elles déconseillées? .
je pense que vous devez utiliser .then et non .success lorsque vous utilisez angular .
Exemple de la doc
var promise = asyncGreet('Robin Hood');
promise.then(function(greeting) {
alert('Success: ' + greeting);
}, function(reason) {
alert('Failed: ' + reason);
}, function(update) {
alert('Got notification: ' + update);
});
Voici l'exemple de la façon dont $ Http l'utilise:
// 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.
});
Et finalement, votre code pourrait ressembler à ceci
$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);
});
};
cela marche
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.
});
Conformément à votre implémentation actuelle, vous ne transmettez pas les arguments (c.-à-d. $scope
et $http
) à getUserInfo
à partir de ng-click="getUserInfo()"
et vous obtenez donc l’erreur.
Vous n'avez pas besoin de les transmettre en tant qu'arguments en tant que $scope
et $http
en tant que contrôleur déjà injecté et définir la fonction dans $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();
}]);
Vous n'avez pas besoin d'injecter $ 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;
});
}
});
$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);
});
Pas besoin de passer $ http en tant que paramètre de fonction, car vous avez déjà injecté $ http en tant que dépendance à votre contrôleur. J'ai apporté quelques modifications au code. S'il vous plaît vérifier que cela fonctionnera bien pour vous.
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();
}]);
Selon Angular JS $http
documentation , ce système a été exclu de 1.4.3 +
. J'ai donc pris l’aide de son post et vous pouvez essayer de cette façon
app.controller('MainCtrl', function ($scope, $http){
$http({
method: 'GET',
url: 'api/url-api'
}).then(function (success){
},function (error){
});
}
OU
$http.get('api/url-api').then(successCallback, errorCallback);
function successCallback(response){
//success code
}
function errorCallback(error){
//error code
}
Je préfère le second qui était plus flexible pour moi.