$ http.get (…) .success bukanlah sebuah fungsi

108

saya punya kode ini:

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

Di lingkungan lokal saya, berfungsi dengan baik, tetapi di server, kembalikan kesalahan ini:

TypeError: $ http.get (...). Sukses bukan sebuah fungsi

Ada ide? Terima kasih

Alejo Ribes
sumber
1
versi apa di envm lokal dan di server? btw, $ http.get kembali HttpPromise, sehingga Anda perlu menggunakan itu sebagai gantinya
Grundy
sudahkah Anda memeriksa bahwa semua javascript Anda dimuat di lingkungan server?
bansi
7
yang then()tidaksuccess()
Patrick Evans
10
The .successsintaks benar hingga V1.4.3 sudut. Lihat dokumen lama di sini: code.angularjs.org/1.4.3/docs/api/ng/service/$http
Mihai MATEI
5
dan secara resmi dihapus dalam v.1.6
adamdport

Jawaban:

212

The .successsintaks benar hingga V1.4.3 sudut.

Untuk versi hingga Angular v.1.6, Anda harus menggunakan thenmetode. The then()Metode membutuhkan dua argumen: a successdan errorcallback yang akan dipanggil dengan objek respon.

Menggunakan then()metode ini, lampirkan callbackfungsi ke yang dikembalikan promise.

Sesuatu seperti ini:

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

   },function (error){

   });
}

Lihat referensi di sini.

Shortcut metode juga tersedia.

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

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

Data yang Anda dapatkan dari respons diharapkan dalam JSONformat. JSON adalah cara yang bagus untuk mengirimkan data , dan mudah digunakan dalam AngularJS

Perbedaan utama antara 2 adalah bahwa .then()panggilan mengembalikan a promise(diselesaikan dengan nilai yang dikembalikan dari a callback) sedangkan .success()cara pendaftaran yang lebih tradisional callbacksdan tidak mengembalikan a promise.

Mihai Alexandru-Ionut
sumber
Saya mencoba dengan. Lalu dan bekerja dengan baik, terima kasih Alexandru-Ionut Mihai
Alejo Ribes
1
.successdan .thenmengambil param yang berbeda, memperhitungkan itu
Max Koretskyi
Jika menulis ulang kode yang ada, mungkin mudah untuk menampilkan dua argumen-fungsi (berhasil, kesalahan) yang disebutkan di atas sebaris, dan tidak terpisah seperti pada contoh.
Tony Sepia
"$ resource (...). get (...). then is not a function" ... Mengapa angularJS begitu jelek dalam hal konsistensi?
Hobbamok
8

Ini mungkin berlebihan tetapi jawaban yang paling banyak dipilih di atas mengatakan .then(function (success) dan itu tidak berhasil untuk saya pada versi Angular 1.5.8. Alih-alih gunakan responselalu di dalam blok, response.datadapatkan saya data json saya yang saya cari.

$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.');
});
Ian Poston Framer
sumber
Maksudku ... apakah kamu mencoba success.data? nama parameter tidak terlalu penting dalam kasus ini.
Kevin B
Kode saya berfungsi. Ketika saya mengikuti jawaban di atas, saya terjebak. Ini juga merupakan jawaban dengan cara untuk benar-benar mendapatkan data dan memasukkannya ke konsol Anda. Ini dapat menunjukkan kepada pengembang cara menguji data mereka di browser mereka. Saya diarahkan ke sini oleh kesalahan yang sama persis pada judul pertanyaan.
Ian Poston Framer
kode lama $http.get('data/data.json').success(function(data) { data = data;}dengan jawaban saya, pengembang sekarang tahu bahwa ia data.datatidak bisa mendapatkan data dengan sendirinya. karenanya jawaban saya penting untuk pesan kesalahan ini.
Ian Poston Framer
Nama variabel tidak akan membuat perbedaan, itu bisa success.dataatau response.dataatau apa pun. Anda bahkan dapat menggunakan donaldTrump.dataitu juga akan berhasil. Meskipun Anda harus menggunakan nama variabel yang masuk akal, tidak yakin yang ini akan masuk akal.
Gaurav Arya
Ini karena objek sukses memiliki larik bernama datayang menyimpan data yang datang sebagai respons dari server Anda. Anda perlu mengakses larik data itu, menggunakan <yourSuccessObjectName>.data
Gaurav Arya
3

Jika Anda mencoba menggunakan AngularJs 1.6.6 pada 21/10/2017, parameter berikut berfungsi sebagai .success dan telah habis. Metode .then () mengambil dua argumen: respons dan callback kesalahan yang akan dipanggil dengan objek respons.

 $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 di atas berfungsi untuk halaman login.

Wazzie
sumber