$ http.get(…).successは関数ではありません


108

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

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

私のローカル環境では問題なく動作しますが、サーバーでは次のエラーを返します。

TypeError:$ http.get(...)。successは関数ではありません

何か案は?ありがとう


1
ローカル環境とサーバーのバージョンは何ですか?ところで、$ http.getはHttpPromiseを返すので代わりに使用する必要があります
Grundy

すべてのJavaScriptがサーバー環境に読み込まれることを確認しましたか?
bansi '15 / 12/16

7
そうではありthen()ませんsuccess()
Patrick Evans

10
.success構文は角度v1.4.3への正しい最高でした。古いドキュメントはこちら:code.angularjs.org/1.4.3/docs/api/ng/service/$http
Mihai MATEI 2017年

5
およびv.1.6で正式に削除
adamdport

回答:


212

.success構文は角度v1.4.3への正しい最高でした。

Angular v.1.6までのバージョンでは、thenメソッドを使用する必要があります。then()A:この方法は、二つの引数取りsuccesserrorレスポンスオブジェクトを伴って呼び出されるコールバックを。

then()メソッドを使用しcallbackて、返されたに関数をアタッチしますpromise

このようなもの:

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を試してみましたが、うまくいきました。Alexandru-IonutMihaiに感謝します
Alejo Ribes

1
.successそして.then、異なる
パラメーターを

既存のコードを書き換える場合、上記の2つの引数関数(成功、エラー)をインラインで表示するのは簡単で、例のように個別に表示するのは簡単ではありません。
トニーセピア2018

"$ resource(...)。get(...)。then is not a function" ...一貫性に関して、angularJSはなぜそれほどひどいのですか?
ホバモク

8

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

つまり...あなたは試しましたsuccess.dataか?この場合、パラメーター名はそれほど重要ではありません。
ケビンB

私のコードは動作します。上記の回答をたどると、行き詰まりました。これは、実際にデータを取得してコンソールに記録する方法を備えた回答でもあります。これは、ブラウザでデータをテストする方法を開発者に示すことができます。私はここで、質問の見出しの同じ正確なエラーに導かれました。
Ian Poston Framer 2017年

$http.get('data/data.json').success(function(data) { data = data;}私の答えのある古いコードは、開発者が自分でdata.dataデータを取得できないことを知っています。したがって、私の答えはこのエラーメッセージにとって重要です。
Ian Poston Framer 2017年

変数名は任意の違いをすることはありません、それは可能性がsuccess.dataまたはresponse.dataまたは何か他のもの。あなたもdonaldTrump.dataそれがうまくいくように使うことができ ます。賢明な変数名を使用する必要がありますが、これが意味を成すかどうかはわかりません。
Gaurav Arya 2017

これは、successオブジェクトに、dataサーバーからの応答として送られるデータを保持するという名前の配列があるためです。次を使用して、そのデータ配列にアクセスする必要があります <yourSuccessObjectName>.data
Gaurav Arya

3

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

上記の抜粋は、ログインページで機能します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.