调用google api时,$ .ajax会返回错误

时间:2013-12-22 15:27:05

标签: javascript ajax angularjs

我正在构建一个有角度的应用程序,我有一个“公共交通”部分,我想从谷歌api获取方向。我似乎得到了一个有效的网址 - 当我在浏览器中输入网址时,它会返回json。但是当用户$ .ajax时出现错误。

地址

http://maps.googleapis.com/maps/api/directions/json?
origin=Assenede,%20Belgi%C3%AB&destination=Industrieweg%20232,Gent-
Mariakerke,belgium&sensor=false&departure_time=1343641500&mode=transit

角度控制器中的功能

$scope.getDirections = function(){

        var directions_url = "http://maps.googleapis.com/maps/api/directions/json" +
         "?origin=" + $scope.details.formatted_address +
         "&destination=Industrieweg 232,Gent-Mariakerke,belgium" +
         "&sensor=false" + 
         "&departure_time=1343641500"+
         "&mode=transit";

         console.log(directions_url);

        $.ajax({
            type:"GET",
            dataType:"json",
            contentType:"application/jsonp",
            url: directions_url,
            success:function(data){
                alert(data);
            },
            error:function(xhr, status, error){
                console.log('error:' + status + error);
            }
        });
     }

有没有人可以提出解决方案?

提前致谢。 HS。

2 个答案:

答案 0 :(得分:1)

原因是您没有正确设置dataType,因为它需要使用JSONP。这就是为什么你可能会得到这个错误(我假设你正在使用jQuery):

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. 

但是,即使您通过重写代码来解决这个问题,如下所示:

var url = "http://maps.googleapis.com/maps/api/directions/json?origin=Assenede,%20Belgi%C3%AB&destination=Industrieweg%20232,Gent-Mariakerke,belgium&sensor=false&departure_time=1343641500&mode=transit";

$.ajax({
    dataType:"jsonp",
    url: url,
    success:function(data){
        alert(data);
    },
    error:function(xhr, status, error){
        console.log('error:' + status + error);
    }
});

你会收到另一个错误:

Uncaught SyntaxError: Unexpected token : json:2
error:parsererrorError: jQuery110209881844320334494_1387726816235 was not called 

这意味着远程端(在您的情况下为Google)向您发送简单的JSON而不是请求的JSONP。正如David所说,您需要修改您的解决方案,并找到另一种调用Google API的方法(例如,您可以尝试使用Google Maps JavaScript API)。

答案 1 :(得分:0)

该URL返回普通JSON,但您需要JSONP来发出跨源请求。我不确定谷歌是否有地图的JSONP选项,但您可以查看其他一些方法,如CORS或服务器端代理。