我正在尝试使用latidute和经度来获取城市名称。
Google地理编码支持此选项并称为“Reverse geocoding”。 正如在示例中所写,我必须向此链接发出get请求:
http://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&sensor=true_or_false
它在json中返回我的数组,你可以试试。
我如何在jquery中解析这个json?
我试图这样做:
$.ajax({
url: 'http://maps.googleapis.com/maps/api/geocode/json',
type: 'get',
data: {
'latlng':lat+","+longit,
'sensor': false
},
dataType: 'jsonp',
success: function(result){
console.log(results)
},
error: function(xhr,ajaxOptions,thrownError){
console.log(xhr.status);
console.log(ajaxOptions);
console.log(thrownError);
}
})
我得到这个数组,但无法解析。它说:
未捕获的SyntaxError:意外的令牌:
我该如何解决这个问题?
答案 0 :(得分:2)
简短回答;你不能:这里不支持JSONP(或者至少实际上没有记录为支持JSONP),而是使用Geocoder类。
希望在JavaScript应用程序中使用此服务?查看Google Maps API v3的Geocoder类。
似乎Google只提供简单的JSON,由于同源策略而无法在您自己的页面中解析 - 但如果您是例如,您可以使用它。在没有该限制的另一台服务器上运行的php应用程序。因此,如果您想在网页上使用它,那么使用他们的Geocoder类就可以了 - 它无论如何都会为您解析。
-
当您使用dataType =“jsonp”时,jQuery会尝试通过创建SCRIPT元素并将src属性设置为查询字符串来加载结果。然后浏览器最终得到返回的json,并尝试解析它,因为它是一个自包含的javascript文件 - 这就是失败的。
问题是JSON是无效的普通独立javascript:例如,返回的JSON字符串:
{ "results" : [ { "address_components" : [
...无法解析 - 这就是造成错误的原因。如果是,那么另一方面,
var foo = { "results" : [ { "address_components" : [
或
callback({ "results" : [ { "address_components" : [ ... } )
然后它将是有效的JavaScript。后者是jsonp实际上依赖于返回的东西。
底线是您获得了有效的JSON,但由于原始策略相同,您无法通过XmlHttpRequest直接访问它;并且因为它不是带有围绕它的函数的JSONP,所以你不能通过JSONP依赖的SCRIPT后门来解决相同的原始问题。您在网页上使用此选项的唯一选择是使用Google为您提供的类 - 因为它们也来自Google网站,他们可以访问JSON并成功解析它 - 并返回已处理的结果还给你。
答案 1 :(得分:1)
尝试使用dataType: jsonp,
代替dataType: jsomp,
。
答案 2 :(得分:0)
尝试在ajax设置中添加以下内容:
contentType: "application/json; charset=utf-8";
编辑
这是我用firebug看到的:
{
"results" : [
{
"address_components" : [
{
"long_name" : "285",
"short_name" : "285",
"types" : [ "street_number" ]
},
{
"long_name" : "Bedford Ave",
"short_name" : "Bedford Ave",
"types" : [ "route" ]
},
{
"long_name" : "Williamsburg",
"short_name" : "Williamsburg",
"types" : [ "neighborhood", "political" ]
},
{
"long_name" : "Brooklyn",
"short_name" : "Brooklyn",
"types" : [ "sublocality", "political" ]
},
{
"long_name" : "New York",
"short_name" : "New York",
"types" : [ "locality", "political" ]
},
{
"long_name" : "Kings",
"short_name" : "Kings",
"types" : [ "administrative_area_level_2", "political" ]
},
.
.
.
答案 3 :(得分:0)
问题似乎是ajax请求没有返回任何内容。大概是一个空字符串是无效的JSON?
编辑:现在是!我第一次尝试下面的“小提琴”时,Firebug报告了对该请求的空洞回应!