$ http.get (…)। असफल एक फ़ंक्शन नहीं है


108

मेरे पास यह कोड है:

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

मेरे स्थानीय वातावरण में, ठीक काम करता है, लेकिन सर्वर में, इस त्रुटि को वापस करें:

TypeError: $ http.get (...)। सफलता एक कार्य नहीं है

कोई विचार? धन्यवाद


1
स्थानीय एनवीएम और सर्वर पर क्या संस्करण है? Btw, $ http.get HttpPromise लौटने के लिए, तो आप का उपयोग की जरूरत है तो बजाय
Grundy

क्या आपने जाँच की है कि आपके सभी जावास्क्रिप्ट सर्वर वातावरण में लोड होते हैं?
बंसी

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

जवाबों:


212

.successवाक्य रचना कोणीय v1.4.3 करने के लिए सही था।

Angular v.1.6 तक के संस्करणों के लिए, आपको thenविधि का उपयोग करना होगा । then()एक: विधि दो तर्क लेता है successऔर एक errorकॉलबैक जो एक प्रतिक्रिया वस्तु के साथ बुलाया जाएगा।

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 के साथ प्रयास किया और ठीक है, धन्यवाद अलेक्जेंड्रू-आयनुत मिहाई
अलेजो रिब्स

1
.successऔर .thenअलग-अलग परम को लें, उसके लिए
मैक्स कोरसेटस्की

यदि मौजूदा कोड को फिर से लिखा जाता है, तो इन-लाइन में उल्लिखित दो तर्कों-कार्यों (सफलता, त्रुटि) को प्रस्तुत करना आसान हो सकता है और उदाहरण में अलग-अलग तरह से नहीं।
टोनी सीपिया

"$ संसाधन (...) मिलता है। (...)। तब यह एक फ़ंक्शन नहीं है ..." जब यह स्थिरता की बात आती है तो angularJS इतना भद्दा क्यों है?
होबामोक

8

यह निरर्थक हो सकता है, लेकिन उपरोक्त सबसे अधिक मतदान का उत्तर कहता है .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? पैरामीटर नाम इस मामले में महत्वपूर्ण नहीं है।
केविन बी

मेरा कोड काम करता है। जब मैंने उपरोक्त उत्तर का पालन किया तो मैं अटक गया। यह वास्तव में डेटा प्राप्त करने और इसे अपने कंसोल पर लॉग इन करने के तरीके के साथ एक उत्तर भी है। यह डेवलपर्स को अपने ब्राउज़र में अपने डेटा का परीक्षण करने का तरीका दिखा सकता है। मैं यहाँ प्रश्न शीर्षक में उसी सटीक त्रुटि के द्वारा नेतृत्व किया गया था।
इयान पोस्टन फ्रामर

$http.get('data/data.json').success(function(data) { data = data;}मेरे जवाब के साथ पुराने कोड एक डेवलपर अब जानता है कि data.dataयह केवल अपने आप से डेटा प्राप्त नहीं कर सकता है। इसलिए मेरा उत्तर इस त्रुटि संदेश के लिए महत्वपूर्ण है।
इयान पोस्टन फ्रैमर

चर नाम कोई फर्क नहीं होगा, यह हो सकता है success.dataया response.dataया कुछ और। आप यह भी उपयोग कर सकते हैं donaldTrump.dataकि काम भी करेगा। यद्यपि आपको समझदार चर नामों का उपयोग करना चाहिए, यह सुनिश्चित नहीं है कि यह बहुत समझ में आएगा।
गौरव आर्य

इसका कारण यह है कि सफलता ऑब्जेक्ट में एक सरणी dataहोती है, जो आपके सर्वर से प्रतिक्रिया के रूप में आने वाले डेटा को रखती है। आपको उस डेटा ऐरे को एक्सेस करने की आवश्यकता है, <yourSuccessObjectName>.data
गौरव आर्य

3

यदि आप 21/10/2017 को AngularJs 1.6.6 का उपयोग करने की कोशिश कर रहे हैं, तो निम्न पैरामीटर .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");
        });

उपरोक्त स्निपिट एक लॉगिन पृष्ठ के लिए काम करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.