angularjs - $ Http.get के साथ कोणीयजेएस में त्रुटि-सफलता नहीं एक समारोह




angularjs-http angularjs-1.6 (6)

इस सवाल का पहले से ही यहाँ एक जवाब है:

यह त्रुटि हो रही है:

angular.min.js: 122 TypeError: $ http.get (...)। सफलता एक कार्य नहीं है getUserInfo (app.js: 7) पर नए (app.js: 12) Object.invoke (angular.min) पर .js: 43) पर Q.instance (angular.min.js: 93) p पर (angular.min.js: 68) जी पर (angular.min.js: 60) जी पर (angular.min.js: 61) ) जी पर (angular.min.js: 61) कोणीय.min.js: 60 कोणीय

यहाँ मेरा कोड है:

var gitHub = angular.module('gitHub', []);

gitHub.controller('mainController', ['$scope', '$http', function($scope, $http) {

    var $scope.user = '';
    function getUserInfo($scope, $http){ 
        $http.get('https://api.github.com/users')
            .success(function (result) {
                $scope.user = result;
                console.log(result);
            });
    };
    getUserInfo($scope, $http);
}]);

और यहाँ html है

<!DOCTYPE html>
<html ng-app="gitHub">
<head>
    <title>Github Users Directory</title>
    <script src="angular.min.js"></script>
    <script src="app.js"></script>
</head>
<body>
    <div ng-controller="mainController">
        <div>
            <h1>GitHub Users</h1>
            Who do you want to search for?<input type="text" name="FindHim" ng-model="queryName" />
            <button ng-click="getUserInfo()">Search</button>
        </div>
        <div>
            {{ user }}
        </div>

    </div>
</body>
</html>

अपने वर्तमान कार्यान्वयन के अनुसार, आप ng-click="getUserInfo()" से getUserInfo लिए तर्क (यानी $scope और $http ) पास नहीं कर रहे हैं, इस प्रकार आप त्रुटि प्राप्त कर रहे हैं।

आपको इन्हें $scope और $http रूप में तर्क के रूप में पारित करने की आवश्यकता नहीं है क्योंकि यह पहले से ही नियंत्रक में इंजेक्ट किया गया है और $scope में फ़ंक्शन को परिभाषित करता है।

gitHub.controller('mainController', ['$scope', '$http', function($scope, $http) {

    $scope.user = '';
    //Redefined function, without arguments
    $scope.getUserInfo = function (){ 
        $http.get('https://api.github.com/users')
            .success(function (result) {
                $scope.user = result;
                console.log(result);
            });
    };
    $scope.getUserInfo();
}]);

आप $ गुंजाइश, $ HTTP इंजेक्षन की जरूरत नहीं है ..

app.controller('MainController', function($scope, $http) { 
  $scope.fetchData = function(_city){
    $http.get("../api/AllPlaces?filter[where][placeCity]="+ _city)
    .then(function(response) {
      $scope.Data = response.data;
    });
  }
});

फ़ंक्शन पैरामीटर के रूप में $ http को पारित करने की आवश्यकता नहीं है, क्योंकि आपने पहले ही अपने नियंत्रक पर निर्भरता के रूप में $ http को इंजेक्ट किया है। मैंने कोड में कुछ संशोधन किया है। कृपया जांचें कि यह आपके लिए ठीक काम करेगा।

var gitHub = angular.module('gitHub', []);

gitHub.controller('mainController', ['$scope', '$http', function ($scope, $http) {

    $scope.user = '';

    $scope.getUserInfo = function() {
        $http.get('https://api.github.com/users')
            .success(function (result) {
                $scope.user = result;
                console.log(result);
            });
    };
    $scope.getUserInfo();
}]);

मुझे लगता है कि angular का उपयोग करते समय आपको .then और not .success का उपयोग करने की आवश्यकता है।

डॉक से उदाहरण

var promise = asyncGreet('Robin Hood');
promise.then(function(greeting) {
  alert('Success: ' + greeting);
}, function(reason) {
  alert('Failed: ' + reason);
}, function(update) {
  alert('Got notification: ' + update);
});

यहाँ का उदाहरण है कि $ Http इसका उपयोग कैसे करता है:

// Simple GET request example:
$http({
  method: 'GET',
  url: '/someUrl'
}).then(function successCallback(response) {
    // this callback will be called asynchronously
    // when the response is available
  }, function errorCallback(response) {
    // called asynchronously if an error occurs
    // or server returns response with an error status.
  });

और अंत में आपका कोड इस तरह दिख सकता है

$scope.getUserInfo = function () {
    $http.get('https://api.github.com/users')
        .then(function (result) {
            $scope.user = result;
            console.log(result);
        }, function(result) {
            //some error
            console.log(result);
        });
};

.success और .error विधियाँ हटा दी जाती हैं और उन्हें AngularJS 1.6 से निकाल दिया जाता है । इसके बजाय मानक .then पद्धति का उपयोग करें।

$http.get('https://api.github.com/users')
  .then(function (response) {

    var data = response.data;
    var status = response.status;
    var statusText = response.statusText;
    var headers = response.headers;
    var config = response.config;

    $scope.user = data;
    console.log(data);
});

पदावनति सूचना

$http विरासत के वादे के तरीके। .success और .error को हटा दिया गया है और इसे .error में हटा दिया जाएगा। इसके बजाय मानक .then पद्धति का उपयोग करें।

- AngularJS (v1.5) $ http सेवा एपीआई संदर्भ - पदावनति सूचना

इसके अलावा एसओ देखें : क्यों कोणीय $ http सफलता / त्रुटि विधियों को पदावनत किया जाता है? ।


function successCallback(response) {
return response
}
$http.get('url')
.then(successCallback)





angularjs-1.6