编辑:我从网络数据中得到的实际错误:
“无效的 JSON 原语:位置”
调用它的代码:
function AddMarkerAndPanTo(latLng, map) {
var marker = new google.maps.Marker({
position: latLng,
map: map
});
var x = marker.position;
$.ajax({
type: "POST",
url: '@Url.Action("AddMarker", "Map")', // Map Controller, AddMarker Action
data: JSON.stringify({ "position": x }),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
if (data.done)
alert("Marker added");
else
alert("MARKER FAILED");
}
});
map.panTo(latLng);
}
使用下面发布的 View 模型的服务器端函数:
[HttpPost]
public ActionResult AddMarker(LatLngViewModel position)
{
if (position != null)
return Json(true, JsonRequestBehavior.AllowGet);
else
return Json(false, JsonRequestBehavior.AllowGet);
}
View 模型:
public class LatLngViewModel
{
double latitude { get; set; }
double longitude { get; set; }
}
我尝试使用带引号且不带 on 位置、字符串化结果或使用 toJSON() 返回结果。尝试将 toSend 与各种引号等缝合在一起。此时我不知道是什么原因造成的,而且我手头没有其他解决方案。感谢任何帮助解决这个问题并将血腥坐标发回以某种方式将它们绑定(bind)到模型的帮助。
最佳答案
您需要传递具有纬度和经度属性的对象以匹配您的 View 模型。像这样:
function AddMarkerAndPanTo(latLng, map) {
var marker = new google.maps.Marker({
position: latLng,
map: map
});
$.ajax({
type: "POST",
url: '@Url.Action("AddMarker", "Map")', // Map Controller, AddMarker Action
data: {
latitude: latLng.lat(),
longitude: latLng.lng()
},
success: function (data) {
if (data.done)
alert("Marker added");
else
alert("MARKER FAILED");
}
});
map.panTo(latLng);
}
这是您缺少的重要部分:
data: {
latitude: latLng.lat(),
longitude: latLng.lng()
},
传递给此函数的 latLng
对象有 2 个属性 lat
和 lng
,这两个属性又是您需要调用的函数命令以十进制值形式获取相应的坐标。
更新:
确保您的 View 模型属性是公开:
public class LatLngViewModel
{
public double latitude { get; set; }
public double longitude { get; set; }
}
关于javascript - 使用ajax返回谷歌地图标记始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37092612/