web-dev-qa-db-ja.com

$ http.get(...)。成功は関数ではありません

私はこのコードを持っています:

app.controller('MainCtrl', function ($scope, $http){
  $http.get('api/url-api')
    .success(function (data, status, headers, config){
     }
}

私のローカル環境では、うまくいきますが、サーバーでは、このエラーを返します:

何か案は?ありがとう

92
Alejo Ribes

.success構文は、Angular v1.4.3までは正しいものでした。

Angular v.1.6までのバージョンでは、thenメソッドを使う必要があります。 then()メソッドは2つの引数を取ります。応答オブジェクトとともに呼び出されるsuccessおよびerrorコールバックです。

then()メソッドを使用して、返されたcallbackpromise関数を添付します。

このようなもの:

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 _ data を転送するのに最適な方法であり、 AngularJS の中で使用するのは簡単です。

2との大きな違いは、.then()呼び出しはpromisecallbackから返される値で解決される)を返すのに対し、.success()callbacksを登録するためのより伝統的な方法でpromiseを返さないことです。

182

これは冗長かもしれませんが、上記で最も投票された回答は.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.');
});
6

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");
        });

上記のスニペットはログインページに機能します。

2
Wazzie