我尝试提取formatted_address属性失败。
以下Web服务将下面的JSON记录到控制台。我无法使用returnedData.d.results[0].formatted_address
获取格式化地址。
$.ajax({
type: "POST",
url: "ReportIncident.aspx/ReverseGeocode",
data: "{latitude:" + latitude + ",longitude:" + longitude + "}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (returnedData)
{
console.log(returnedData);
}
});
json的格式与here at Google上的格式完全相同。
修改 Darin指出我自相矛盾:Web服务将上面链接中的所有内容都包含在d对象中,我没有提到。
进一步修改 这是网络服务:
[WebMethod]
public static string ReverseGeocode(decimal latitude, decimal longitude)
{
// Create the web request
string url = "http://maps.googleapis.com/maps/api/geocode/json?latlng=" + latitude + "," + longitude +"&sensor=true";
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
// Get response
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
// Get the response stream
StreamReader reader = new StreamReader(response.GetResponseStream());
return reader.ReadToEnd();
}
}
这是javascript:
/Gets the current location of the user
function getLocation()
{
if (navigator.geolocation)
{
navigator.geolocation.getCurrentPosition(showPosition);
}
}
function showPosition(position)
{
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
$.ajax({
type: "POST",
url: "ReportIncident.aspx/ReverseGeocode",
data: "{latitude:" + latitude + ",longitude:" + longitude + "}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (returnedData)
{
alert(returnedData.d[0].results[0].formatted_address);
console.log(returnedData);
}
});
答案 0 :(得分:1)
您是否尝试在没有returnedData.results[0].formatted_address
节点的情况下使用.d.
。那不存在!
答案 1 :(得分:0)
删除“.d”
returnedData.results[0].formatted_address
但是这样做你总是得到第一个节点
答案 2 :(得分:0)
这个问题的答案结果是Web服务正在返回一个字符串,而不是json。内置的javascript序列化程序不会被使用。需要使用eval关键字或更安全的东西。碰巧我最终使用谷歌地图Javascript API,无论如何这更容易。