$http.get(...).success is not a function
Solution 1
The .success
syntax was correct up to Angular v1.4.3.
For versions up to Angular v.1.6, you have to use then
method. The then()
method takes two arguments: a success
and an error
callback which will be called with a response object.
Using the then()
method, attach a callback
function to the returned promise
.
Something like this:
app.controller('MainCtrl', function ($scope, $http){
$http({
method: 'GET',
url: 'api/url-api'
}).then(function (response){
},function (error){
});
}
See reference here.
Shortcut
methods are also available.
$http.get('api/url-api').then(successCallback, errorCallback);
function successCallback(response){
//success code
}
function errorCallback(error){
//error code
}
The data you get from the response is expected to be in JSON
format.
JSON is a great way of transporting data, and it is easy to use within AngularJS
The major difference between the 2 is that .then()
call returns a promise
(resolved with a value returned from a callback
) while .success()
is more traditional way of registering callbacks
and doesn't return a promise
.
Solution 2
This might be redundant but the above most voted answer says .then(function (success)
and that didn't work for me as of Angular version 1.5.8
. Instead use response
then inside the block response.data
got me my json data I was looking for.
$http({
method: 'get',
url: 'data/data.json'
}).then(function (response) {
console.log(response, 'res');
data = response.data;
},function (error){
console.log(error, 'can not get data.');
});
Solution 3
If you are trying to use AngularJs 1.6.6 as of 21/10/2017 the following parameter works as .success and has been depleted. The .then() method takes two arguments: a response and an error callback which will be called with a response object.
$scope.login = function () {
$scope.btntext = "Please wait...!";
$http({
method: "POST",
url: '/Home/userlogin', // link UserLogin with HomeController
data: $scope.user
}).then(function (response) {
console.log("Result value is : " + parseInt(response));
data = response.data;
$scope.btntext = 'Login';
if (data == 1) {
window.location.href = '/Home/dashboard';
}
else {
alert(data);
}
}, function (error) {
alert("Failed Login");
});
The above snipit works for a login page.
![Alejo Ribes](https://lh5.googleusercontent.com/--7UdqvwGLso/AAAAAAAAAAI/AAAAAAAAAfg/Hxy_gHmUj0c/photo.jpg?sz=256)
Alejo Ribes
Updated on June 08, 2020Comments
-
Alejo Ribes about 4 years
i have this code:
app.controller('MainCtrl', function ($scope, $http){ $http.get('api/url-api') .success(function (data, status, headers, config){ } }
In my local enviroment, works ok, but in a server, return this error:
TypeError: $http.get(...).success is not a function
Any ideas? Thanks
-
Alejo Ribes over 7 yearsI tryed with .then and works ok, thanks Alexandru-Ionut Mihai
-
Max Koretskyi over 7 years
.success
and.then
take different param, account for that -
Kevin B about 7 yearsi mean... did you try
success.data
? the parameter name isn't that important in this case. -
Ian Poston Framer about 7 yearsMy code works. When I followed the above answer I got stuck. It is also an answer with a way to actually get the data and log it to your console. This can show developers how to test their data in their browser. I was led here by the same exact error in the question headline.
-
Ian Poston Framer about 7 yearsold code
$http.get('data/data.json').success(function(data) { data = data;}
with my answer a developer now knows itsdata.data
can't just get data by itself. hence my answer is important to this error message. -
Gaurav Arya over 6 yearsThe variable name will not make any difference, it could be
success.data
orresponse.data
or anything else. You could even usedonaldTrump.data
that will work too. Although you should use sensible variable names, not sure this one will make much sense. -
Gaurav Arya over 6 yearsThis is because the success object has an array named
data
that holds the data coming as response from your server. you need to access that data array, using<yourSuccessObjectName>.data
-
tonysepia almost 6 yearsIf re-writing the existing code, it may be easy to present the two arguments-functions (success, error) mentioned above in-line, and not separately like in the example.
-
Hobbamok almost 6 years"$resource(...).get(...).then is not a function" ... Why is angularJS so crappy when it comes to consistency?