使用ASP.Net Web服务从JSON中提取数据

时间:2012-06-28 13:30:10

标签: javascript jquery asp.net json

我尝试提取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对象中,我没有提到。

enter image description here

进一步修改 这是网络服务:

[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);
        }
    });

3 个答案:

答案 0 :(得分:1)

您是否尝试在没有returnedData.results[0].formatted_address节点的情况下使用.d.。那不存在!

答案 1 :(得分:0)

删除“.d”

returnedData.results[0].formatted_address

但是这样做你总是得到第一个节点

答案 2 :(得分:0)

这个问题的答案结果是Web服务正在返回一个字符串,而不是json。内置的javascript序列化程序不会被使用。需要使用eval关键字或更安全的东西。碰巧我最终使用谷歌地图Javascript API,无论如何这更容易。