$ http.get和$ http.JSONP无法获得google api响应

时间:2015-03-13 06:05:00

标签: javascript html json angularjs google-maps

我试图得到api回复" http://maps.google.com/maps/api/geocode/json?address=Canada&sensor=true&region=USA"使用angularjs $ http .get方法和$ http.JSONP方法。但它没有正常工作它什么都不返回。当我通过REST客户端和浏览器尝试此API时,它提供状态代码为200的JSON数据。

这是我的代码...... 的index.html

<html ng-app="myApp">
<body ng-controller="MyCtrl">
<button ng-click="getlocation()">Get Location</button>
</body>
</html>

app.js

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

app.controller('MyCtrl', ['$scope','$http',function ($scope,$http) {


    $scope.getlocation=function(){

      $scope.method = 'JSONP';
      $http({method: $scope.method, url: "http://maps.google.com/maps/api/geocode/json?address=Canada&sensor=true&region=USA"}).
        success(function(data, status) {

          $scope.status = status;
          $scope.data = data;
          alert(JSON.stringify(data));
        }).
        error(function(data, status) {
          $scope.data = data || "Request failed";
          $scope.status = status;
          alert($scope.data+$scope.status);
      });

    }
}]);

在浏览器中运行此代码时,它什么都不返回。引发错误。 你能帮我摆脱这个问题吗?

3 个答案:

答案 0 :(得分:1)

在角度中使用jsonp,你需要... ?callback=JSON_CALLBACK传递给get调用..

e.g。

 $http({method: $scope.method, url: "http://maps.google.com/maps/api/geocode/json?address=Canada&sensor=true&region=USA&callback=JSON_CALLBACK"}).

详细了解here

答案 1 :(得分:0)

您的代码唯一的问题是没有像JSON这样的HTTP方法。在你的情况下,你需要GET。所以请改用它:

$scope.method = 'GET';

演示: http://plnkr.co/edit/I6qAMbsvLwM3vgZFQa0S?p=preview

答案 2 :(得分:0)

  

您必须将请求方法从 JSONP 更改为 GET

 $scope.getlocation=function(){

      $scope.method = 'get';
      $http({method: $scope.method, url: "http://maps.google.com/maps/api/geocode/json?address=Canada&sensor=true&region=USA"}).
        success(function(data, status) {

          $scope.status = status;
          $scope.data = data;
          alert(JSON.stringify(data));
        }).
        error(function(data, status) {
          $scope.data = data || "Request failed";
          $scope.status = status;
          alert($scope.data+$scope.status);
      });

    }

我已经从我这边测试了它的回报

  

对象{结果:数组[1],状态:“确定”}

希望你得到你想要的东西。