簡體   English   中英

將PHP數組傳遞給Javascript

[英]Passing PHP Array into Javascript

我在PHP中有一個類似下面的數組

array(
    (int) 0 => array(
        'id' => '1',
        'name' => 'Mink7',
        'about' => 'Creative Design agency',
        'logo' => null,
        'lat' => '13.004870000000',
        'lng' => '77.576686084656'
    ),
    (int) 1 => array(
        'id' => '2',
        'name' => 'Bakasura',
        'about' => 'Live 2 Eat',
        'logo' => null,
        'lat' => '13.005643569006',
        'lng' => '77.577485382942'
    )
)

我做了什么。 我在標題中加載了函數,並在body標簽中寫入了以下內容。

<script type="text/javascript">
$(document).ready(function(){
        var startups = <?php echo json_encode($startups); ?>;
        $.each(startups, function(key, val) {
            markMe(val.lat, val.lng, val.name, val.description, val.logo);
        });
});
</script>

我收到以下錯誤

markMe未定義

markMe(val.lat,val.lng,val.name,val.description,val.logo);

附加到HEAD的Javascript文件。

// JavaScript Document
$(document).ready(function () {
    var map = new GMaps({
        div: '#map',
        lat: 13.00487,
        lng: 77.576729,
        zoom: 13,
    });

    /*
    GMaps.geolocate({
        success: function (position) {
            map.setCenter(position.coords.latitude, position.coords.longitude);
        },
        error: function (error) {
            alert('Geolocation failed: ' + error.message);
        },
        not_supported: function () {
            alert("Your browser does not support geolocation");
        },
        always: function () {
            //alert("Done!");
        }
    });
    */

    map.addControl({
        position: 'top_right',
        text: 'Geolocate',
        style: {
            margin: '5px',
            padding: '1px 6px',
            border: 'solid 1px #717B87',
            background: '#fff'
        },
        events: {
            click: function () {
                GMaps.geolocate({
                    success: function (position) {
                        map.setCenter(position.coords.latitude, position.coords.longitude);
                    },
                    error: function (error) {
                        alert('Geolocation failed: ' + error.message);
                    },
                    not_supported: function () {
                        alert("Your browser does not support geolocation");
                    }
                });
            }
        }
    });

    map.addMarker({
        lat: 13.00487,
        lng: 77.576729,
        title: 'Lima',
        icon: "http://i.imgur.com/3YJ8z.png",
        infoWindow: {
          content: '<p>HTML Content</p>'
        }
    });

    function markMe(lat, lng, name, description, logo){
        map.addMarker({
            lat: lat,
            lng: lng,
            title: name,
            icon: "http://i.imgur.com/3YJ8z.png",
            infoWindow: {
              content: description
            }
        });
    }

});

在PHP中查找json_encode ,並在JavaScript中使用JSON.parse (如果需要廣泛的瀏覽器支持,則使用jQuery.parseJSON類的庫)

- 更新后

代替功能markMe(lat,lng,name,description,logo){

do:markMe = function(lat,lng,name,description,logo){

那是因為函數中聲明的函數在該函數之外是不可用的

在回答id之前,我想指出我正在做一些假設。

  1. 我假設上面的數組是在PHP中
  2. 我假設下面的函數是javascript

如果是這種情況,您可以將數組引用放入javascript函數中,它將起作用。

我猜測你的數據映射,我建議一個更好的方法是通過php構建整個函數,並通過方法調用將其輸出到屏幕,使代碼更容易閱讀/理解

然而,猜測你的映射並測試代碼是否在創建方法調用之前工作,我會用這樣的東西作為第一次嘗試。

<script type="text/javascript">
<?php
 foreach($array as $point)
 {
?>
 {
 map.addMarker({
  lat: <?php print $point["lat"]; ?>,
  lng: <?php print $point["lng"]; ?>,
  title: <?php print $point["name"]; ?>,
     icon: <?php if(!is_null($point["logo"]){ print $point["logo"];} ?>,
     infoWindow: {
       content: <?php print $point["about"]; ?>
     }
 });
 <?php } ?>
</script>

謝謝

尼古拉斯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM