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

如何使用while循环将php中的数据传输到javascript,javascript,php,pdo,Javascript,Php,Pdo,如何使用多个标记?此代码仅显示一个标记 我知道我需要使用循环,但如何使用 这段代码将标记与来自谷歌地图数据库的信息放在一起 我的问题是,一旦你把标记放在屏幕上,数据库中的其他标记就不会出现了 <?php $connectmaps=$db->prepare("select title,longt,latit,description from pages where onmap = 1"); $connectmaps->execute(); $loadmaps=$connectma

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

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

这段代码将标记与来自谷歌地图数据库的信息放在一起

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

<?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);
        }

jQuery(函数($){
//谷歌地图
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(脚本);
});
函数初始化(){
var映射;
var bounds=new google.maps.LatLngBounds();
变量映射选项={
mapTypeId:“路线图”
};
//赛法达·哈里塔伊·戈斯特
map=new google.maps.map(document.getElementById(“map_canvas”),mapOptions);
地图.设置倾斜(45);
//多重标记
var phpden=;
var lont=parseFloat(phpden.lont)
var title=phpden.title
var description=phpden.description
var boylam=parseFloat(phpden.latit)
变量标记=[
[标题,long,latit],
];
//İnfo窗口
var infoWindowContent=[
[''+''+标题+'+''+说明+'

'+'+''], ]; //显示多个标记 var infoWindow=new google.maps.infoWindow(),marker,i; //阿雷特çi Dizisini Döngüye Sok ve HaritaÜzerine Yerleştir 对于(i=0;i
$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

只是一个最后的建议,但是正如上面所说的,你应该考虑使用更多的描述性变量名。不仅仅是在团队中工作,而是为你自己。缩写的和不相关的命名变量使你的代码更难理解。当你在你的复杂性增加之后回来时,你或其他人会浪费T。ime正在尝试找出“phpden”和“boylam”是什么。

方法
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);

@zemarkhos只是想指出,使用下面@miken32答案中的
fetchAll()
行将比仅用于收集数据的
for(){fetch()}
循环更好。但是,有一点需要注意,如果在转换为json之前需要修改/添加/计算数据,则需要使用
for()
loop。在这种情况下,
fetchAll()
可能会更好/更快。
<?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);