$ http.get(...). Успех не является функцией
У меня есть этот код:
app.controller('MainCtrl', function ($scope, $http){
$http.get('api/url-api')
.success(function (data, status, headers, config){
}
}
В моей локальной среде работает нормально, но на сервере вернет эту ошибку:
TypeError: $http.get(...). Успех не является функцией
Любые идеи? Благодаря
Ответы
Ответ 1
Синтаксис .success
был правильным до Angular v1.4.3.
Для версий до Angular v.1.6 вы должны использовать метод then
. Метод then()
принимает два аргумента: a success
и обратный вызов error
, который будет вызываться с объектом ответа.
Используя метод then()
, присоедините функцию callback
к возвращенному promise
.
Что-то вроде этого:
app.controller('MainCtrl', function ($scope, $http){
$http({
method: 'GET',
url: 'api/url-api'
}).then(function (success){
},function (error){
});
}
См. ссылку здесь.
Shortcut
также доступны.
$http.get('api/url-api').then(successCallback, errorCallback);
function successCallback(response){
//success code
}
function errorCallback(error){
//error code
}
Ожидается, что данные, полученные из ответа, будут в формате JSON
.
JSON - отличный способ переноса данных, и его легко использовать в AngularJS
Основное различие между 2 заключается в том, что вызов .then()
возвращает a promise
(разрешен со значением, возвращаемым с callback
), а .success()
является более традиционным способом регистрации callbacks
и не возвращается a promise
.
Ответ 2
Это может быть излишним, но выше всего проголосовавший ответ говорит .then(function (success)
, и это не сработало для меня, как из Angular version 1.5.8
. Вместо этого используйте response
, затем внутри блока response.data
достали мне мои данные json, которые я искал.
$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.');
});
Ответ 3
Если вы пытаетесь использовать AngularJs 1.6.6 от 21/10/2017, следующий параметр работает как .success и был исчерпан. Метод .then() принимает два аргумента: ответ и обратный вызов ошибки, который будет вызываться с объектом ответа.
$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");
});
Вышеупомянутый snipit работает для страницы входа.