使用ajax返回google地图标记始终为null

编辑:我从网络数据获得的实际错误:

在此处输入图像描述

“无效的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); } 

服务器端function使用下面发布的视图模型:

 [HttpPost] public ActionResult AddMarker(LatLngViewModel position) { if (position != null) return Json(true, JsonRequestBehavior.AllowGet); else return Json(false, JsonRequestBehavior.AllowGet); } 

视图模型:

 public class LatLngViewModel { double latitude { get; set; } double longitude { get; set; } } 

我尝试使用引号而不使用位置,将结果字符串化或使用toJSON()返回。 尝试缝合toSend与各种报价等。此时我不知道是什么导致它,我手头没有其他解决方案。 感谢任何有关解决此问题的帮助,并将血腥的坐标发送回来以某种方式将它们绑定到模型。

您需要传递具有纬度和经度属性的对象以匹配您的视图模型。 像那样:

 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个属性latlng ,而这些属性又是您需要调用的函数,以便将相应的坐标作为十进制值。


更新:

确保您的视图模型属性是公共的

 public class LatLngViewModel { public double latitude { get; set; } public double longitude { get; set; } } 

不要使用JSON.stringify来准备后期数据。

只需使用:

 data: { "position": latLng.toJSON()},