使用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个属性lat
和lng
,而这些属性又是您需要调用的函数,以便将相应的坐标作为十进制值。
更新:
确保您的视图模型属性是公共的 :
public class LatLngViewModel { public double latitude { get; set; } public double longitude { get; set; } }
不要使用JSON.stringify
来准备后期数据。
只需使用:
data: { "position": latLng.toJSON()},