如何使用while循环将php中的数据传输到javascript

时间:2019-05-16 16:39:27

标签: javascript php pdo

如何使用多个标记?该代码仅显示一个标记。

我知道我需要使用循环,但是如何?

此代码将标记与来自Google Maps数据库中的信息一起放置

我的问题是,一旦将标记放在屏幕上,数据库中的其他标记就不会出现。

<?php
$connectmaps=$db->prepare("select title,longt,latit,description from pages where onmap = 1");
$connectmaps->execute();
$loadmaps=$connectmaps->fetch(PDO::FETCH_ASSOC);

$loadmap_json = json_encode($loadmaps);
?>

<script>
jQuery(function ($) {
        // Google Maps
        var script = document.createElement('script');
        script.src = "http://maps.googleapis.com/maps/api/js?sensor=false&callback=initialize&key=MY_GOOGLE_MAPS_API_KEY";
        document.body.appendChild(script);
    });
    function initialize() {
        var map;
        var bounds = new google.maps.LatLngBounds();
        var mapOptions = {
            mapTypeId: 'roadmap'
        };
        // Sayfada Haritayı Göster
        map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
        map.setTilt(45);


        // Multiple Markers
        var phpden = <?php echo $loadmap_json; ?>;
        var longt= parseFloat(phpden.longt)
        var title= phpden.title
        var description = phpden.description
        var boylam = parseFloat(phpden.latit)

        var markers = [ 
            [title, longt, latit],
        ];
        // İnfo Windows
        var infoWindowContent = [
            ['<div class="info_content">' + '<h3>' + title+ '</h3>' + '<p>' + description + '</p>' + '</div>' + ''],
        ];


        // Show multiple markers
        var infoWindow = new google.maps.InfoWindow(), marker, i;
        // İşaretçi Dizisini Döngüye Sok ve Harita Üzerine Yerleştir
        for (i = 0; i < markers.length; i++) {
            var position = new google.maps.LatLng(markers[i][1], markers[i][2]);
            bounds.extend(position);
            marker = new google.maps.Marker({
                position: position,
                map: map,
                title: markers[i][0]
            });


            google.maps.event.addListener(marker, 'click', (function (marker, i) {
                return function () {
                    infoWindow.setContent(infoWindowContent[i][0]);
                    infoWindow.open(map, marker);
                }
            })(marker, i));
            // Tüm İşaretçileri Otomatik Olarak Ekrana Sığdır
            map.fitBounds(bounds);
        }

2 个答案:

答案 0 :(得分:1)

fetch()方法仅获取第一条记录。而是使用fetchAll()方法。这将为您提供集合中每个记录的多维数组。

还请注意, 如果您没有将任何变量传递到查询中 ,则PDO确实有一种query()方法;无需准备和执行。

<?php
$connectmaps = $db->query(
    "SELECT title, longt, latit, description FROM pages WHERE onmap = 1"
);
$loadmaps = $connectmaps->fetchAll(\PDO::FETCH_ASSOC);
$loadmaps_json = json_encode($loadmaps);

答案 1 :(得分:0)

$loadmaps=$connectmaps->fetch(PDO::FETCH_ASSOC);行本身仅会获取结果集的第一条记录,因此,您可能需要遍历结果集并将每个结果附加到数组中,例如

$mapMarkers = [];
while($marker=$connectmaps->fetch(PDO::FETCH_ASSOC)){ 
   array_push($mapMarkers, $marker);
}
$loadmap_json = json_encode($mapMarkers);

您还需要修改JavaScript,以期望包含一组标记,因为您的当前代码期望获得单个结果。您还应该预期没有结果的可能性(空JSON数组)。

for(var i = 0; i < phpden.length(); i++) {
 //Do you process of each marker here... e.g. phpden[i].longt
 //Or better... create a function that you call for each marker to add them
}

这只是最后的建议,但如上所述,您应该考虑使用更具描述性的变量名。如果您在团队中工作,不仅适合他人,还适合您自己。缩写和不相关的命名变量使您的代码更难以理解。当您在复杂性增加之后再回来时,您或其他人将浪费时间试图找出“ phpden”和“ boylam”是什么。