$http.get 和 $http.JSONP 未能获得 google api 响应

Posted

技术标签:

【中文标题】$http.get 和 $http.JSONP 未能获得 google api 响应【英文标题】:$http.get and $http.JSONP failed to get the google api response 【发布时间】:2015-05-15 13:23:37 【问题描述】:

我尝试使用 angularjs $http .get 方法和 $http.JSONP 方法获取“http://maps.google.com/maps/api/geocode/json?address=Canada&sensor=true&region=USA”的 api 响应。但它不能正常工作,它什么也不返回。当我通过 REST 客户端和浏览器尝试此 api 时,它提供的 JSON 数据的状态码为 200。

这是我的代码... 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);
      );

    
]);

在浏览器中运行此代码时,它不会返回任何内容。抛出错误。 你能帮我解决这个问题吗?

【问题讨论】:

提及您遇到的错误 状态码:404 Request Failed response...你能告诉我如何通过angularjs调用这个api“maps.google.com/maps/api/geocode/…” 【参考方案1】:

要在 Angular 中使用 jsonp,您需要... ?callback=JSON_CALLBACK 传递给 get 调用..

例如

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

阅读更多信息here

【讨论】:

感谢您的回答。我已尝试过 ?callback=JSON_CALLBACK。但它不起作用......在 plunker 演示中尝试这个 $http(method: $scope.method, url: "maps.google.com/maps/api/geocode/…") :plnkr.co/edit/spDiD4V6JCCXrtRNDV11?p=preview ...一旦你这样做了你就可以理解我的问题了跨度> 【参考方案2】:

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

$scope.method = 'GET';

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

【讨论】:

感谢您的回答。我试过 $scope.method = 'GET';由于请求失败,这也无法显示错误。此网址plnkr.co/edit/I6qAMbsvLwM3vgZFQa0S?p=preview 也显示相同的错误“请求失败” 我可以看到我提供的演示工作完美,不知道你会失败。【参考方案3】:

您必须将请求方法从 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],状态:“OK”

希望你得到你想要的。

【讨论】:

以上是关于$http.get 和 $http.JSONP 未能获得 google api 响应的主要内容,如果未能解决你的问题,请参考以下文章

AngularJs $http 请求服务

“未捕获的语法错误:意外的令牌:”与 $http.jsonp

请求数据

使用 JSONP 未找到 JSON_CALLBACK

vue-resource使用 (vue仿百度搜索)

HTTP GET 参数未传递给 Express app.get [重复]