我有以下数组
var array = []; // It has (48.154176701412744,11.551694869995117),(48.15131361676726,11.551694869995117),(48.15555092529958,11.549291610717773) saved in it.
这就是我如何通过ajax将它发送到我的aspx页面
function result() {
var jsonText = JSON.stringify({ list: array });
$.ajax({
url: "test.aspx/Demo", type: "POST", dataType: "json",
contentType: "application/json; charset=utf-8",
data: jsonText,
success: function (data) { alert("it worked"); },
error: function () { alert("Uh oh"); }
});
return false;
}
这就是我在aspx中访问它的方式
public static void Demo(double[] list)
{
}
但是当我尝试打印时,它会给我“0 0 0”。当我试图像
那样访问它时public static void Demo(string[] list)
{
}
上述方法甚至不接受JSON对象。那么,由于该方法甚至不接受JSON对象,应该使用适当的数据类型来访问此数组?或者告诉我在JS中拆分字符串(xyz,xyz),(xyz,xyz)的方法,以便我可以将其转换为字符串并将其作为字符串与JSON一起发送?
答案 0 :(得分:1)
我的猜测是您接受的Web方法参数类型不正确。将Web方法的参数类型更改为List<Dictionary<string,string>>
,这样大多数对象都可以正确反序列化,特别是如果它是JSON类型,如示例所示。
尚未获得谷歌地图API的经验,快速搜索显示它可能看起来像这样:
var coord = { "lat" : "xx.xxxxxxx", "long" : "yy.yyyyyyyy" };
如果确实如此,类型List<Dictionary<string,string>>
的参数将正确反序列化您通过AJAX调用传递的JSON数组。
下面是如何遍历提供给您的Web方法的列表并构建所有坐标的字符串的示例:
StringBuilder sb = new StringBuilder();
foreach (Dictionary<string, string> coord in list)
{
sb.Append(string.Format("({0},{1})", coord["lat"], coord["long"]));
}
当然,您可以更改构建字符串的格式以满足您的要求。同样,假设是字典被反序列化为&#34; lat&#34;和#34;长&#34;,其中我不确定。希望它有所帮助!
答案 1 :(得分:-1)
使用此
更改数组var array = [[48.154176701412744,11.551694869995117],[48.15131361676726,11.551694869995117],[48.15555092529958,11.549291610717773]];
希望这会有所帮助