$ http.get (…) .success ไม่ใช่ฟังก์ชัน


109

ฉันมีรหัสนี้:

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

ในสภาพแวดล้อมในพื้นที่ของฉันทำงานได้ดี แต่ในเซิร์ฟเวอร์ส่งคืนข้อผิดพลาดนี้:

TypeError: $ http.get (... ) ความสำเร็จไม่ใช่ฟังก์ชัน

ความคิดใด ๆ ? ขอบคุณ


1
เวอร์ชันใดบน local envm และบนเซิร์ฟเวอร์ BTW, $ http.getกลับ HttpPromise ดังนั้นคุณจำเป็นต้องใช้แล้วแทน
ใจแคบ

คุณตรวจสอบว่าจาวาสคริปต์ทั้งหมดของคุณโหลดในสภาพแวดล้อมเซิร์ฟเวอร์หรือไม่
bansi

7
มันthen()ไม่ได้success()
แพทริคอีแวนส์

10
.successไวยากรณ์ก็ขึ้นอยู่ที่ถูกต้องเพื่อ v1.4.3 เชิงมุม ดูเอกสารเก่าได้ที่นี่code.angularjs.org/1.4.3/docs/api/ng/service/$http
Mihai MATEI

5
และนำออกอย่างเป็นทางการใน v.1.6
adamdport

คำตอบ:


213

.successไวยากรณ์ก็ขึ้นอยู่ที่ถูกต้องเพื่อ v1.4.3 เชิงมุม

สำหรับเวอร์ชันที่สูงถึง Angular v.1.6 คุณต้องใช้thenmethod then()วิธีการจะใช้เวลาสองข้อโต้แย้งก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เป็นวิธีการขนส่งข้อมูลที่ยอดเยี่ยมและใช้งานง่ายภายในAngularJS

ความแตกต่างที่สำคัญระหว่าง 2 คือ.then()ผลตอบแทนที่โทรpromise(แก้ไขด้วยค่ากลับมาจากcallback) ในขณะที่.success()เป็นวิธีการแบบดั้งเดิมมากขึ้นของการลงทะเบียนและไม่ได้กลับมาเป็นcallbackspromise


ฉันลองกับ. แล้วและใช้งานได้ดีขอบคุณ Alexandru-Ionut Mihai
Alejo Ribes

1
.successและ.thenใช้พารามิเตอร์ที่แตกต่างกันบัญชีนั้น
Max Koretskyi

หากเขียนโค้ดที่มีอยู่ซ้ำอาจเป็นเรื่องง่ายที่จะนำเสนออาร์กิวเมนต์ - ฟังก์ชันทั้งสอง (ความสำเร็จข้อผิดพลาด) ที่กล่าวถึงข้างต้นในบรรทัดและไม่แยกกันเหมือนในตัวอย่าง
Tony Sepia

"$ resource (... ). get (... ). then is not a function" ... ทำไม angularJS จึงเส็งเคร็งเมื่อพูดถึงความสอดคล้อง?
Hobbamok

9

นี้อาจจะซ้ำซ้อน แต่คำตอบที่ได้รับการโหวตมากที่สุดเหนือกล่าวว่าและที่ไม่ได้ทำงานสำหรับฉันเป็นของรุ่นเชิงมุม.then(function (success) 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หรือยัง? ชื่อพารามิเตอร์ไม่สำคัญในกรณีนี้
Kevin B

รหัสของฉันใช้งานได้ เมื่อฉันทำตามคำตอบข้างต้นฉันก็ติดขัด นอกจากนี้ยังเป็นคำตอบพร้อมวิธีรับข้อมูลจริงและบันทึกลงในคอนโซลของคุณ สิ่งนี้สามารถแสดงให้นักพัฒนาเห็นวิธีทดสอบข้อมูลในเบราว์เซอร์ของตน ฉันถูกนำโดยข้อผิดพลาดเดียวกันในบรรทัดแรกของคำถาม
Ian Poston Framer

รหัสเก่า$http.get('data/data.json').success(function(data) { data = data;}พร้อมคำตอบของฉันตอนนี้นักพัฒนารู้แล้วว่าdata.dataไม่สามารถรับข้อมูลได้ด้วยตัวเอง ดังนั้นคำตอบของฉันจึงมีความสำคัญต่อข้อความแสดงข้อผิดพลาดนี้
Ian Poston Framer

ชื่อตัวแปรจะไม่สร้างความแตกต่างอาจเป็นsuccess.dataหรือresponse.dataหรืออย่างอื่นก็ได้ คุณสามารถใช้ donaldTrump.dataมันได้เช่นกัน แม้ว่าคุณควรใช้ชื่อตัวแปรที่เหมาะสม แต่ไม่แน่ใจว่าชื่อนี้จะสมเหตุสมผลมาก
Gaurav Arya

เนื่องจากออบเจ็กต์ความสำเร็จมีชื่ออาร์เรย์dataที่เก็บข้อมูลที่มาเป็นการตอบสนองจากเซิร์ฟเวอร์ของคุณ คุณต้องเข้าถึงอาร์เรย์ข้อมูลนั้นโดยใช้ <yourSuccessObjectName>.data
Gaurav Arya

4

หากคุณกำลังพยายามใช้ AngularJs 1.6.6 ณ วันที่ 21/10/2017 พารามิเตอร์ต่อไปนี้จะทำงานเป็น .success และหมดลง เมธอด. then () รับสองอาร์กิวเมนต์: การตอบสนองและการเรียกกลับข้อผิดพลาดซึ่งจะถูกเรียกด้วยอ็อบเจ็กต์การตอบสนอง

 $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 ด้านบนใช้ได้กับหน้าเข้าสู่ระบบ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.