Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用ajax返回google地图标记始终为空_Javascript_Jquery_Ajax_Google Maps - Fatal编程技术网

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

Javascript 使用ajax返回google地图标记始终为空,javascript,jquery,ajax,google-maps,Javascript,Jquery,Ajax,Google Maps,编辑:我从网络数据中获得的实际错误: “无效的JSON基元:位置” 调用它的代码: function AddMarkerAndPanTo(latLng, map) { var marker = new google.maps.Marker({ position: latLng, map: map }); var x = marker.position; $.ajax({ type: "POST",

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

“无效的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);
}
服务器端功能使用下面发布的视图模型:

[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; }
}

我尝试使用with quotes而不使用on position,将结果字符串化或使用toJSON()返回结果。尝试用各种引号将toSend缝合在一起。在这一点上,我不知道是什么导致了它,我手头也没有其他解决方案。感谢您在解决此问题并将坐标发回以某种方式绑定到模型方面提供的帮助。

不要使用
JSON.stringify
来准备post数据

只需使用:

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

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

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
对象有两个属性
lat
lng
,这两个属性是您需要调用的函数,以便将相应的坐标作为十进制值


更新:

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

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

你使用哪种服务器端语言?它是C#,使用ASP.NET。你能解释一下背后的原因吗?我尝试了你的建议,现在我已经更改了它,它为我提供了一个500(内部服务器错误)。上次我出现这个错误,是因为它们可能包含循环引用,这意味着我需要以某种方式消除任何循环信息,并通过单独发送长信息和纬度信息来清理它,不过我不知道该怎么做……谢谢你的回复,我已经在对这两个值进行函数调用了,并且仔细检查了拼写。谢天谢地,删除了contentType和dataType后停止了错误,但是现在返回的所有数据都是0。我尝试将viewModel中的值设置为float、double和decimal,但没有效果。请参阅我更新的答案。视图模型上的属性应该是公共的,否则模型绑定器将忽略它们。锁定它。。。我在这一个词上花了4个小时的时间。再次感谢达林。我现在需要躺一会儿:P