我正在构建一个有角度的应用程序,我有一个“公共交通”部分,我想从谷歌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。
答案 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或服务器端代理。