私はこのコードを持っています。
app.controller('MainCtrl', function ($scope, $http){
$http.get('api/url-api')
.success(function (data, status, headers, config){
}
}
私のローカル環境では問題なく動作していますが、サーバーではこのようなエラーが返されます。
TypeError: $http.get(...).success is not a function
何かアイデアはありませんか?ありがとうございます。
.success」の構文は、Angular v1.4.3までは正しいものでした。
Angular v.1.6までのバージョンでは、then
メソッドを使用する必要があります。then()メソッドは2つの引数を取ります。
successコールバックと
error`コールバックで、これらはレスポンスオブジェクトと共に呼び出されます。
Then()メソッドを使って、返された
promiseに
callback` 関数をアタッチします。
以下のような感じです。
app.controller('MainCtrl', function ($scope, $http){
$http({
method: 'GET',
url: 'api/url-api'
}).then(function (response){
},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()
の呼び出しがpromise
(callback
から返される値で解決される)を返すのに対し、.success()
はcallbacks
を登録する伝統的な方法で、promise
を返さないことです。
これは重複するかもしれませんが、上記の最も投票された回答では .then(function (success)
) となっていますが、Angularのバージョンが 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.');
});
2017/10/21時点でAngularJs 1.6.6を使おうとしている場合、以下のパラメータは.successとして動作し、枯渇しています。.then()メソッドは、レスポンスと、レスポンスオブジェクトで呼び出されるエラーコールバックの2つの引数を取ります。
$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");
});
上記のスニピートは、ログインページで動作します。