2016-06-01 7 views
1

가 제공 호출하는 동안 AngularJS와

// this is service where i m calling api 
 
app.factory('users',['$http','$q', function($http , $q) { 
 
\t 
 
     return { 
 
    \t getUsers: function() { 
 
    \t \t var deferred = $q.defer(); 
 
    \t \t var url = 'http://www.geognos.com/api/en/countries/info/all.jsonp?callback=JSONP_CALLBACK'; 
 
    \t \t  
 
    \t \t $http.jsonp(url).success(function (data, status, headers, config) { 
 
    \t \t \t console.log(data); 
 
    \t \t \t deferred.resolve(data); 
 
    \t \t }). 
 
      \t error(function (data, status, headers, config) { 
 
       //this always gets called 
 
       console.log(status); 
 
       deferred.reject(status); 
 
      }); 
 
      return deferred.promise; 
 

 
    } 
 
     } 
 
     
 
}]); 
 

 
//this is my controller where i calling getUsers(); 
 

 

 
app.controller('myCtrl', function($scope, users) { 
 
     $scope.data = users.getUsers(); 
 

 
    })

에 $의 HTTP를 사용하여 API를 JSONP 호출하는 방법을 나

Uncaught ReferenceError: callback is not defined(anonymous function)

Plz은 나에게 적절한 솔루션을 제공 오류 . 사전에 감사드립니다

답변

1

$http 이미 약속을 반환합니다. 약속의 약속을 세울 필요는 없습니다. 이 시도 :

app.factory('Users', ["$http", function($http){ 
    return { 
     getUsers: function(url) { 
      return $http({ 
       url: url, 
       method: 'JSONP' 
      }); 
     } 
    }; 
}]); 

컨트롤러 :

app.controller("MyCtrl", ["$scope", "Users", function($scope, Users) { 
    $scope.data = []; 
    Users.getUsers('http://www.geognos.com/api/en/countries/info/all.jsonp?callback=JSONP_CALLBACK').then(function(response){ 
     console.log(response.data); 
     $scope.data = response.data; 
    }).catch(function(response){ 
     console.log(response.statusText); 
    }); 
}]); 
1
여기

당신이 $window.callback 함수를 선언해야대로 시나리오가 조금 다르다.

코드

var app = angular.module("demoApp", []); 
app.factory('UserService', ['$http', function ($http, $q) { 

    var getUsers = function() { 
     var url = 'http://www.geognos.com/api/en/countries/info/all.jsonp?callback=callback'; 
     return $http.jsonp(url); 
    }; 
    return { 
     GetUsers: getUsers 
    } 

}]); 
app.controller("demoController", 
["$scope", "$window", "UserService", 
    function ($scope, $window, UserService){ 
     UserService.GetUsers(); 
     $window.callback = function (response) { 
      $scope.countries = response.Results; 
     } 
}]); 

Plunkr : http://plnkr.co/edit/MFVpj1sMqJpcDg3ZwQFb?p=preview