我想通过javascript从以下查询字符串返回的json数据中获取formatted_address。
http://maps.googleapis.com/maps/api/geocode/json?latlng=44.4647452,7.3553838&sensor=true
function getReverseGeocodingData(lat, lng) {
//use ajax and json
$.ajax({
type: "POST",
url: "http://maps.googleapis.com/maps/api/geocode/json?latlng="+sessionStorage.latitude+","+sessionStorage.longitude+"&sensor=true",
data: jsondata,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
var address = response.Result;
var error = response.Error;
if (address != null) {
alert("Found current location: " + address.formatted_address);
sessionStorage.currentAddress = address.formatted_address;
return;
}
},
error: function (msg) {
errorConnection();
}
});
}
我尝试使用formatted_address,但它返回undefined。
答案 0 :(得分:0)
您可以获得这样的格式化地址(Ajax Success)
success: function (results) {
var address = (results[0].formatted_address);
alert(JSON.stringify(address));
},
答案 1 :(得分:0)
抱歉,我以前的回复只修复了AJAX请求 - 在请求中指定contentType不是必需的,并且没有影响 - 这由服务器控制。
jQuery已经将请求解析为一个对象,在响应上调用JSON.stringify
导致该对象被解析为JSON格式的字符串,删除该行解决了该问题。同样指定dataType似乎没有必要。
值得注意的是,您正在传递lat和lng参数但不使用它们 - 我建议添加以下行:
lat = lat || sessionStorage.latitude;
lng = lng || sessionStorage.longitude;
下面应该是一个完整的建议解决方案:
function getReverseGeocodingData(lat, lng) {
lat = lat || sessionStorage.latitude;
lng = lng || sessionStorage.longitude;
jsondata = {};
//use ajax and json
$.ajax({
type: "POST",
url: "http://maps.googleapis.com/maps/api/geocode/json?latlng=" + sessionStorage.latitude + "," + sessionStorage.longitude + "&sensor=true",
data: jsondata,
success: function (response) {
var address = response.results[0].formatted_address;
var error = response.Error;
if (address != null) {
alert("Found current location: " + address);
sessionStorage.currentAddress = address;
}
},
error: function (msg) {
errorConnection();
}
});
}
答案 2 :(得分:0)
刚刚更改了成功功能,您将获得所有格式化的地址
success: function (response) {
var address = response.results;
var error = response.error; //write exact word of the "error" which you get in response
if(address.length > 0) {
for(i=0; i<address.length; i++) {
console.log("Found current location: " + address[i].formatted_address);
}
}
},
答案 3 :(得分:0)
有几件事需要解决:
显然,您在发出GET
请求时不必发布数据。
我重写了您的代码,以便从lat
和lng
中获取参数,以便轻松测试。
response
是一个包含results
个对象数组的对象(小写r
复数形式)。每个对象都包含formatted_address
属性。
您很可能想要获取第一个:
response.results[0].formatted_address
function getReverseGeocodingData(lat, lng) {
//use ajax and json
$.ajax(
{
type: "GET",
url: "http://maps.googleapis.com/maps/api/geocode/json?latlng="+lat+","+lng+"&sensor=true",
dataType: "json",
success: function (response) {
alert("Found current location: " + response.results[0].formatted_address);
},
error: function (msg) {
alert('error');
}
});
}
试一试:
getReverseGeocodingData(44.4647452,7.3553838);
输出:
Found current location: Via Pasubio, 34, 12025 Dronero CN, Italia