Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.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
Jquery 数据未正确通过谷歌地图信息窗口循环_Jquery_Json_Google Maps_Google Maps Api 3 - Fatal编程技术网

Jquery 数据未正确通过谷歌地图信息窗口循环

Jquery 数据未正确通过谷歌地图信息窗口循环,jquery,json,google-maps,google-maps-api-3,Jquery,Json,Google Maps,Google Maps Api 3,我有一个通过JSON拉入的数据。它正在正确地拉入,并将标记定位在它们应该位于的位置。 我遇到的问题是关于google.maps.event.addListener,所有标记都在信息窗口中显示相同的内容,由于某些原因,它似乎没有正确地在数据中循环 下面是我的想法,任何关于为什么这不能正常工作的想法,谢谢 $.get('http://localhost/map/map/locations', function(result) { var locations = $.parseJSON(res

我有一个通过JSON拉入的数据。它正在正确地拉入,并将标记定位在它们应该位于的位置。 我遇到的问题是关于
google.maps.event.addListener
,所有标记都在信息窗口中显示相同的内容,由于某些原因,它似乎没有正确地在数据中循环

下面是我的想法,任何关于为什么这不能正常工作的想法,谢谢

$.get('http://localhost/map/map/locations', function(result) {
    var locations = $.parseJSON(result);


    // Markers
    var markers = [];

    // Looping through the JSON data
    for (var i = 0, length = locations.length; i < length; i++) {

        var data = locations[i];

        // Creating a marker and putting it on the map
        var marker = new google.maps.Marker({
            position: new google.maps.LatLng(data.lat, data.long),
            map: map,
            title: data.title,
            icon: iconSrc[data.category]
        });
        markers.push(marker);


        google.maps.event.addListener(marker, 'click', (function(marker, i) {
            return function() {
                infoWindow.setContent("<div class='cont_box' id='" + data.entry_id + "'> <h2>" + data.title + "</h2> <div class='cont'><p><img src='" + data.infoImage + "' alt='' width='100' height='66' style='float:right;'>" + data.windowText + "</p></div><div style='clear:both;'></div><div class='link'><a href='" + data.moreLink + "' target='_blank'>" + data.moreText + "</a></div></div>");
                infoWindow.open(map, marker);
            }
        })(marker, i));

    }// END for loop

});
$.get('http://localhost/map/map/locations,函数(结果){
变量位置=$.parseJSON(结果);
//标记
var标记=[];
//在JSON数据中循环
对于(变量i=0,长度=locations.length;i”);
信息窗口。打开(地图、标记);
}
})(marker,i));
}//循环结束
});
更新

在将数据变量添加到上下文中之后,它可以正常工作

我现在必须根据它们的类别显示和隐藏标记。我认为这可能是一个类似的问题。在数据变量中包含这些隐藏和显示函数的最佳方式是什么

职能:

    /** Shows all markers of a particular category, and ensures the checkbox is checked **/
    function show(category) {
        for (var i=0; i<locations.length; i++) {
            if (data.category == category) {
                markers[i].setVisible(true);
            }
        }
    }// END function show



    /** Hides all markers of a particular category, and ensures the checkbox is cleared **/
    function hide(category) {
        for (var i=0; i<locations.length; i++) {
            if (data.category == category) {
              markers[i].setVisible(false);
            }
        }
    }// END function hide

    /** Show or hide the categories initially **/
    show("financial_services");
    show("government");
    show("identity_access");
    show("machine_to_machine");
    show("telecommunications");
    show("transport");

    /** Action when checkbox is clicked **/
    $(".checkbox").click(function(){
        var cat = $(this).attr("value");

        // If checked
        if ( $(this).is(":checked") ){
            show(cat);
        }
        else {
            hide(cat);
        }
    });
/**显示特定类别的所有标记,并确保选中复选框**/
功能展示(类别){

对于(var i=0;i您的addListener将打开一个新的上下文,因此您的数据变量不可用。请在上下文中添加数据变量:

google.maps.event.addListener(marker, 'click', (function(marker, i, myData) {
    return function() {
       infoWindow.setContent("<div class='cont_box' id='" + myData.entry_id + "'> <h2>");
       infoWindow.open(map, marker);
    }
})(marker, i, data));
google.maps.event.addListener(标记,'click',(函数(标记,i,myData){
返回函数(){
infoWindow.setContent(“”);
信息窗口。打开(地图、标记);
}
})(标记,i,数据));

这是一个常见问题解答:您需要在一个单独的函数中创建标记以获得闭包。请参见此处:谢谢您的帮助!我已经更新了帖子,您是否可以查看显示和隐藏函数如何访问数据变量?
google.maps.event.addListener(marker, 'click', (function(marker, i, myData) {
    return function() {
       infoWindow.setContent("<div class='cont_box' id='" + myData.entry_id + "'> <h2>");
       infoWindow.open(map, marker);
    }
})(marker, i, data));