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
//画多边形函数
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);
}
}
});
}
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]);
}
}