javascript - 如何将 json ajax 用于谷歌地图标记

标签 javascript c# jquery asp.net-mvc google-maps

我尝试将 Json Ajax 用于谷歌地图标记。因此在单击运行 Ajax 按钮后,我遇到了问题。它不是显示标记 是否应该做出改变? 我的问题在哪里? 这是运行 ajax 后我的操作:

      [HttpPost]
    public ActionResult AsMapAjax(string jobid,string subid,string Searchitem)
    {
        string markers = "[";
        foreach (var item in UnitOfWork.WD.GetAll())
        {
            markers += "{";
            markers += string.Format("'title': '{0}',", "Test");
            markers += string.Format("'lat': '{0}',", item.Lat);
            markers += string.Format("'lng': '{0}',", item.Lng);
            markers += string.Format("'description': '{0}'", "www.google.com");

            markers += "},";
        }
        markers += "];";

        var mark= new MvcHtmlString(markers);
        return Json(new { success = true, responseText = mark }, JsonRequestBehavior.AllowGet);


    }
}

和我的 jquery ajax(脚本):

navigator.geolocation.getCurrentPosition(function (p) {
    var latlng = new google.maps.LatLng(p.coords.latitude, p.coords.longitude);

    var mapOptions = {
        center: latlng,
        zoom: 12,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var infoWindow = new google.maps.InfoWindow();
    var map = new google.maps.Map(document.getElementById("dvMap"), mapOptions);
    //You re Here
    var iconoMarca = "../../images/URHere.gif";
    mymarker = new google.maps.Marker({
        animation: google.maps.Animation.DROP,

        map: map,
        icon: iconoMarca,
        position: latlng

    });
      $('#prt').on('click', function () {
        var Subid = document.getElementById("bluee").value;
        var jobid = document.getElementById("Jobs").value;
        var Searchitem = document.getElementById("SearchItem").value;
        $.ajax({
            type: "post",
            url: "/My/AsMapAjax",
            dataType: 'json',


            data: { subid:Subid,jobid:jobid,Searchitem:Searchitem},
            success: function (response) {
                if (response != null && response.success) {
                    //alert(response.responseText);
                    markers=response.responseText;

                } else {

                    alert("there is a problem!");
                }
            },
            error: function (response) {
                alert("Sorry!try again please.");

            }


        }

)

        ///////
        //label
        var  numberMarkerImg = {
            url: '../../images/shapemarker.png',
            size: new google.maps.Size(32, 38),
            scaledSize: new google.maps.Size(32, 38),
            labelOrigin: new google.maps.Point(21,42)
        };
        var markerLabel = 'Test';


        for (i = 0; i < markers.length; i++) {

            var data = markers[i]
            var myLatlng = new google.maps.LatLng(data.lat, data.lng);

                var marker = new google.maps.Marker({
                position: myLatlng,
                map: map,
                //label
                label:markerLabel ,
                title: data.title,
                icon:numberMarkerImg,
                animation: google.maps.Animation.DROP


            });


            ( function (marker, data) {
                google.maps.event.addListener(marker, "click", function (e) {
                    infoWindow.setContent(data.description);
                    infoWindow.open(map, marker);
                    window.location.href = "/My/sargarmi";

                });
            })
         (marker, data);

        }


        google.maps.event.addDomListener(window, "resize", function() {
            var center = map.getCenter();
            google.maps.event.trigger(map, "resize");
            map.setCenter(center);
        });

    });

但标记不显示!如何解决这个问题? 还是这个问题的其他方式? 非常感谢

最佳答案

您的问题没有解释您遇到的具体问题。因此,我将为您提供一个简单有效的解决方案,它可以改进您所做的一些事情。

让我们从您的服务器方法开始。您正在通过字符串连接构建 json 数组的字符串化版本。这是不必要的,而且容易出错。为什么不让作为 mvc 框架的一部分的 JSON 序列化程序为您做这件事呢?

创建一个简单的类来表示您的标记

public class Marker
{
    public string Title { set; get; }
    public double Lat { set; get; }
    public double Lng { set; get; }
}

现在在您的操作方法中,构建此标记类的列表,您可以将其传递给 Json 方法。

[System.Web.Mvc.HttpPost]
public ActionResult AsMapAjax(string jobid, string subid, string Searchitem)
{
    //Hard coded for demo. You may replace with values from db
    var list = new List<Marker>
    {
        new Marker() { Title="AA" ,Lat =  -33.890542, Lng=151.274856 },
        new Marker() { Title="BB", Lat =  -33.923036, Lng=151.259052 },
        new Marker() { Title="CC" ,Lat =  -34.028249, Lng=151.157507 },
    };
    return Json(new { success = true, responseText = list });
}

现在在您的客户端,您对这个操作方法进行 ajax 调用,读取返回的响应并添加标记。

$(function() {
    $('#prt').on('click', function() {
        initMap();
    });
});

function initMap() {
    //read the parameter values you want to send to server
    var searchItem =$("#SearchItem").val();
    var jobs=$("#Jobs").val();
    var subid = $("#bluee").val();

    var map = new google.maps.Map(document.getElementById('map'),
        {
            zoom: 8
        });
    var url = "@Url.Action("AsMapAjax", "Home")";

    $.post(url, { searchTerm: searchItem,jobid: jobs,subid : subid },function(res) {
            if (res.success) {
                var latLng;
                $.each(res.responseText,function(i, item) {
                        latLng = new google.maps.LatLng(item.Lat, item.Lng);
                        var marker = new google.maps.Marker({
                            position: latLng,
                            map: map
                        });

                    });
                map.setCenter(latLng);
            }
    });
}

我正在使用 Url.Action 方法为操作方法生成正确的相对 url,因为我的脚本位于 Razor 代码块内。如果您在外部 javascript 文件中使用此代码,请遵循 this post 中描述的解决方案。处理那个案子

关于javascript - 如何将 json ajax 用于谷歌地图标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46511499/

相关文章:

javascript - 为 Web Rails 开发人员提供的 Rubymine 技巧

javascript - Angular promise 中的 "f"是什么意思?

c# - 在 WPF MVVM 模式中打开子窗口 - 正确的解决方案?

javascript - 从 jquery 中的所有后代中删除样式属性

javascript - 一旦它们在视口(viewport)中可见,就将类添加到这些部分

javascript - 取消回调函数的返回值

javascript - 相当于 : my_obj. 高度 += 10;在 adobe animate HTML5 Canvas 中?

c# - 如何获取应用程序的安装路径?

c# - 如何在应用程序启动时最大化 WPF 页面?

javascript - 在光标附近添加帮助文本