$ http.get (…) .success bir işlev değildir


109

bu koda sahibim:

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

Yerel ortamımda iyi çalışıyor, ancak bir sunucuda şu hatayı döndür:

TypeError: $ http.get (...). Başarı bir işlev değildir

Herhangi bir fikir? Teşekkürler


1
yerel ortam ve sunucuda hangi sürüm? btw $ http.get kullanmak gerek, böylece HttpPromise dönmek sonra yerine
Grundy

Tüm javascriptlerinizin sunucu ortamında yüklendiğini kontrol ettiniz mi?
bansi

7
onun then()değilsuccess()
Patrick Evans

10
.successSözdizimi Eğik v1.4.3 doğru yukarı idi. Eski belgelere buradan bakın: code.angularjs.org/1.4.3/docs/api/ng/service/$http
Mihai

5
ve
v.1.6'da

Yanıtlar:


213

.successSözdizimi Eğik v1.4.3 doğru yukarı idi.

Angular v.1.6'ya kadar olan sürümler için, thenyöntemi kullanmanız gerekir . then()A: yöntem, iki bağımsız değişken successve errorbir yanıt nesnesi ile çağrılır geri arama.

then()Yöntemi kullanarak, callbackdöndürülen bir işlev ekleyin promise.

Bunun gibi bir şey:

app.controller('MainCtrl', function ($scope, $http){
   $http({
      method: 'GET',
      url: 'api/url-api'
   }).then(function (response){

   },function (error){

   });
}

Buradaki referansa bakın .

Shortcut yöntemler de mevcuttur.

$http.get('api/url-api').then(successCallback, errorCallback);

function successCallback(response){
    //success code
}
function errorCallback(error){
    //error code
}

Cevaptan aldığınız verilerin JSONformatta olması beklenir . JSON , verileri taşımanın harika bir yoludur ve AngularJS içinde kullanımı kolaydır

2 arasındaki en büyük fark, .then()çağrının a döndürmesidir promise(a'dan döndürülen bir değerle çözülür callback), ancak .success()daha geleneksel kaydetme yöntemidir callbacksve a döndürmez promise.


İle denedim ve iyi çalışıyor, teşekkürler Alexandru-Ionut Mihai
Alejo Ribes

1
.successve .thenfarklı bir parametre alın, bunu hesaba
katın

Mevcut kodu yeniden yazıyorsanız, yukarıda bahsedilen iki bağımsız değişken-işlevi (başarı, hata) satır içinde sunmak kolay olabilir ve örnekteki gibi ayrı ayrı değil.
Tony Sepia

"$ resource (...). get (...). o zaman bir işlev değildir" ... AngularJS neden tutarlılık söz konusu olduğunda bu kadar berbat?
Hobbamok

9

Bu gereksiz olabilir, ancak yukarıda en çok oylanan cevap diyor .then(function (success)ve bu Angular versiyondan itibaren benim için işe yaramadı 1.5.8. Bunun yerine responsebloğun içinde kullanmak response.databana aradığım json verilerimi aldı.

$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.');
});

Demek istediğim ... denedin success.datami? bu durumda parametre adı o kadar önemli değildir.
Kevin B

Kodum çalışıyor. Yukarıdaki cevabı takip ettiğimde takılıp kaldım. Aynı zamanda, verileri gerçekten alıp konsolunuza kaydetmenin bir yolu olan bir cevaptır. Bu, geliştiricilere verilerini tarayıcılarında nasıl test edeceklerini gösterebilir. Burada soru başlığındaki aynı hatadan dolayı yönlendirildim.
Ian Poston Framer

cevabımla eski kod $http.get('data/data.json').success(function(data) { data = data;}artık bir geliştirici, data.dataverileri kendi başına alamayacağını biliyor . bu nedenle cevabım bu hata mesajı için önemlidir.
Ian Poston Framer

Değişken adı herhangi bir fark yaratmayacaktır, olabilir success.dataya response.datada başka bir şey olabilir. Bunu donaldTrump.datada işe yarayacak şekilde kullanabilirsiniz . Mantıklı değişken isimleri kullanmanız gerekse de, bunun pek bir anlam ifade edeceğinden emin değilim.
Gaurav Arya

Bunun nedeni, başarılı nesnenin datasunucunuzdan yanıt olarak gelen verileri tutan bir diziye sahip olmasıdır. bu veri dizisine erişmeniz gerekiyor <yourSuccessObjectName>.data
Gaurav Arya

4

21/10/2017 itibarıyla AngularJs 1.6.6'yı kullanmaya çalışıyorsanız, aşağıdaki parametre .success olarak çalışır ve tükenmiştir. .Then () yöntemi iki bağımsız değişken alır: bir yanıt ve bir yanıt nesnesiyle çağrılacak bir hata geri çağrısı.

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

Yukarıdaki kod parçası bir giriş sayfası için çalışıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.