首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Ajax >

Googlemap使用$.ajax获取不到后台函数返回json格式字符串,画不出多边形

2013-01-02 
Google地图使用$.ajax获取不到后台函数返回json格式字符串,画不出多边形本帖最后由 showbo 于 2012-12-03

Google地图使用$.ajax获取不到后台函数返回json格式字符串,画不出多边形
本帖最后由 showbo 于 2012-12-03 13:50:22 编辑 我做的是一个基于web的土地利用系统,以下是首页前台部分代码,用来获取数据库中土地利用数据并转换成json数据读取然后根据获取的坐标在Google地图上绘制出多边形,但是不知道怎么回事,DataQuery()执行结果总是返回error,好像这段代码

          type: "POST",
            contentType: 'application/json',
            url: "WebMethods.aspx/GetAllSoilUse",
            data: "{}",
            dataType: 'json', //返回的类型为Json

总是起反作用一样,从来都不会跳转到success处。还请哪位高手帮忙指点指点,问题在哪里,为什么获取不到GetAllSoilUse返回的字符串,Google地图上也画不出多边形。

default.aspx部分代码:
//画多边形函数
    function drawOverlay(SoilUse) {
        //定义多边形的坐标点数组
        var coordinates = [];
        //多边形的坐标点数组从json数据中获取
        var zuoBiao = [];
        zuoBiao = SoilUse.SoilPosition.split(";");
        for (var i = 0; i < zuoBiao.length - 1; i++) {
            coordinates.push(new google.maps.LatLng(zuoBiao[i].substr(0, zuoBiao[i].indexOf(",")), zuoBiao[i].substr(zuoBiao[i].indexOf(",") + 1)));
        }

        //设置多边形参数
        var polygon = new google.maps.Polygon({
            path: coordinates,
            strokeColor: SoilUse.STypeColor,
            strokeOpacity: 0.8,
            strokeWeight: 2,
            fillColor: SoilUse.STypeColor,
            fillOpacity: 0.35
        });

        //将多边形显示在地图上
        polygon.setMap(map);
        //将多边形放入查询结果数组中
        SoilUsePolygons.push(polygon);

        //定义信息窗口(显示当前点击的多边形土地块的基本信息)
        var infowindow = new google.maps.InfoWindow({
            content: '<div id="content"><div class="title">土地名称:<strong>' + SoilUse.SoilName + '</strong></div>' +
            '<div class="bodyContent"><div>土地类型:' + SoilUse.SoilTypeName + '</div><div>土地面积:' + SoilUse.SoilArea + 'km<sup>2</sup></div><div>发布时间:' + SoilUse.Time + '</div></div></div>'
        });

        //为多边形添加Click事件(单击多边形时,弹出关于当前多边形土地块的信息窗口)


        google.maps.event.addListener(polygon, 'click', function(event) {
            if (marker != null) {
                marker.setMap(null);
            }

            marker = new google.maps.Marker({
                position: event.latLng,
                map: map
            });
            infowindow.open(map, marker);
        });
    }

    $(function() {
    
        //初始化地图
        initialize();
        //查询土地利用情况,并将结果显示在地图上
        DataQuery();
        //每2分钟自动刷新地图
        setInterval("DataQuery()", 120000);
    });
       
    function DataQuery() {
    
        //通过ajax查询土地利用情况
        $.ajax({
            type: "POST",
            contentType: 'application/json',
            url: "WebMethods.aspx/GetAllSoilUse",
            data: "{}",
            dataType: 'json', //返回的类型为Json
            success: function(result) {
                //先清空地图
                if (SoilUsePolygons) {
                    for (i in SoilUsePolygons) {
                        SoilUsePolygons[i].setMap(null);
                    }
                }

                //查询前清空地图上的标记点
                if (marker != null) {
                    marker.setMap(null);
                }

                $.each($.parseJSON(result.d), function(i, n) {


                  alert(n.SoilPosition);
                  alert("hello")
                    drawOverlay(n);
                });
            },
            error: function(result, status) { //如果没有上面的捕获出错会执行这里的回调函数
                if (status == 'error') {
                    alert(status);
                }
            }
        });
    }



后台WebMethods.aspx.cs代码
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Services;
using System.Data;

public partial class WebMethods : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
       
    }

    /// <summary>
    /// 获取指定时间段内,指定类型的土地利用数据
    /// </summary>
    /// <param name="startTime">开始时间</param>
    /// <param name="endTime">结束时间</param>
    /// <param name="sSoilType">土地类型</param>
    /// <returns></returns>
    [WebMethod]
    public static string GetSoilUse(DateTime startTime, DateTime endTime, string sSoilType)
    {
        string sql = @"Select SoilUsageID,SoilUsage.SoilName,SoilPosition,Time,SoilArea,STypeColor,STypeName as SoilTypeName from SoilUsage,SoilType Where SoilUsage.STypeID=SoilType.STypeID And SoilUsage.Time between '" + startTime + "' And '" + endTime + "' And SoilUsage.STypeID In(" + sSoilType + ")";
        return JsonHelper.DataTableToJSON(SqlHelper.ExecuteDataSet(sql).Tables[0]);
    }

    /// <summary>
    /// 获取全部土地利用数据
    /// </summary>
    /// <returns></returns>
    [WebMethod]
    public static string GetAllSoilUse()
    {
        string sql = @"Select SoilUsageID,SoilName,SoilPosition,Time,SoilArea,STypeColor,STypeName as SoilTypeName from SoilUsage,SoilType Where SoilUsage.STypeID=SoilType.STypeID";
        return JsonHelper.DataTableToJSON(SqlHelper.ExecuteDataSet(sql).Tables[0]);



    }
}



[解决办法]
跟我应该是遇到一样的问题,在google地图中,出了success,你的变量就没值了

还有一个问题就是,建议不要用c#代码来写google maps,google maps v3对javascript比较敏感
[解决办法]
 

热点排行