Tengo este código:
app.controller('MainCtrl', function ($scope, $http){
$http.get('api/url-api')
.success(function (data, status, headers, config){
}
}
En mi entorno local, funciona bien, pero en un servidor, devuelve este error:
TypeError: $http.get(...).success no es una función
¿Alguna idea? Gracias
La sintaxis de .success
era correcta hasta Angular v1.4.3.
Para las versiones hasta Angular v.1.6, hay que utilizar el método then
. El método then()
toma dos argumentos: un success
y un callback error
que será llamado con un objeto respuesta.
Usando el método then()
, adjunta una función callback
a la promesa devuelta.
Algo así:
app.controller('MainCtrl', function ($scope, $http){
$http({
method: 'GET',
url: 'api/url-api'
}).then(function (response){
},function (error){
});
}
Véase la referencia aquí.
También están disponibles los métodos Shortcut
.
$http.get('api/url-api').then(successCallback, errorCallback);
function successCallback(response){
//success code
}
function errorCallback(error){
//error code
}
Se espera que los datos que se obtengan de la respuesta estén en formato JSON
.
JSON es una gran manera de transportar datos, y es fácil de usar dentro de AngularJS.
La mayor diferencia entre las dos es que la llamada .then()
devuelve una promesa
(resuelta con un valor devuelto por un callback
) mientras que .success()
es una forma más tradicional de registrar callbacks
y no devuelve una promesa
.
Esto puede ser redundante pero la respuesta más votada arriba dice .then(function (success)
y eso no me funcionó a partir de la versión de Angular 1.5.8
. En su lugar, utilice response
y luego dentro del bloque response.data
me consiguió mis datos json que estaba buscando.
$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.');
});
Si estás intentando usar AngularJs 1.6.6 a partir del 21/10/2017 el siguiente parámetro funciona como .success y ha sido agotado. El método .then() toma dos argumentos: una respuesta y un callback de error que será llamado con un objeto de respuesta.
$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");
});
El fragmento anterior funciona para una página de inicio de sesión.