3

すべて、私は次のコードを持っています:

function addPoints() {

newpoints[0] = new Array(41.45998, 87.59643, icon0, 'Place', 'Content to open'); 

    for(var i = 0; i < newpoints.length; i++) {
       var point = new GPoint(newpoints[i][1],newpoints[i][0]);
       var popuphtml = newpoints[i][4] ;
       var marker = createMarker(point,newpoints[i][2],popuphtml);
       map.addOverlay(marker);
   }
}

私の地図にマーカーを表示するために、これの周りに他のコードがあります。ただし、この値はハードコーディングされています。緯度/経度座標と他の値を持つPHP/mySQLデータベースがあります。マーカーを作成したいエントリが3つあるとします。この関数で正しく使用できるように、データベースから取得したlat / long関数をaddPoints関数に渡すにはどうすればよいですか?

addPointsのコードを次のように更新しました。

function addPoints(num, lat, long) {
newpoints[num] = new Array(lat, long, icon0, 'Place', 'Stuff name'); 
alert("The newpoints length is: "+newpoints.length);
for(var i = 1; i < newpoints.length; i++) {
    var point = new GPoint(newpoints[i][1],newpoints[i][0]);
    var popuphtml = newpoints[i][4] ;
    var marker = createMarker(point,newpoints[i][2],popuphtml);
    map.addOverlay(marker);
}
}

私はこれを行うことによってこの関数を呼び出します:

<script> 
    addPoints('<?php echo json_encode($num_coordinates); ?>','<?php echo json_encode($lat_coordinates); ?>', '<?php echo json_encode($long_coordinates); ?>');
</script>

しかし、それは機能しません。それをjavascriptに渡さずに、たとえば緯度座標を出力しようとすると。次の出力が得られます。

{"1":"40.59479899","2":"41.4599860"}

これは私の配列の正しい座標です。ただし、マーカーは作成されません。次に何をすべきか、または私が間違っていることについて何かアイデアはありますか?

4

4 に答える 4

7

PHPからJavaScriptに配列を渡す簡単でクリーンな方法は、配列echojson_encodeバージョンを単純化することです。

$array = array(1,2,3,4,5,6);
echo 'var values = '.json_encode($array).';';
于 2011-11-29T18:54:27.657 に答える
3

PHPは、クライアントに送信される前にサーバー上で実行されます。したがって、このようなことができる場合:

newpoints[0] = new Array(<?php echo $lattitude;?>, <?php echo $longitude;?>, icon0, 'Place', 'Content to open');

PHPを使用してデータベースから取得した値はどこ$lattitudeにありますか。$longitude

このページがクライアントから要求されると、phpコードが実行され、実際の値がそれらのphpタグによってプラグインされて、提供した例のようになり、クライアントに送信されます。

クライアントでJSを使用してこれらの値を変更する場合、またはサーバーから新しい値を取得する場合は、お知らせください。その例を追加します。

編集:

さて、あなたのコメントに照らして、あなたにはいくつかの選択肢があるように思えます。これが1つです:

ユーザーがカテゴリ(レストラン、バーなど)を選択すると、そのカテゴリをurlパラメータとして渡し、ページ全体またはその一部の地図のみを再読み込みします(設定によって異なりますが、調査する価値がある場合があります)。リンクは次のようになります。

http://www.your-domain-here.com/maps.php?category=bars

Maps.phpは、$_GET配列を使用してカテゴリをキャッチする準備ができています。

$category = $_GET['category']; //'bars'

次に、PHPはデータベースから適切な位置データを取得し(その部分はあなたに任せます)、JSが制御するマップが使用できる変数にそれを貼り付けます。

//JS in maps.php  -  you could add this var to the window object
// if you have separated js files...
var locationCoords = <?php echo json_encode($arrayOfCoordinatesFromDB);?>;

クライアントマシンでページを読み込むと、マップに使用する座標の配列がlocationCoords変数に含まれるようになります。

次に、マップに表示する必要のある座標に応じて、addPoints()標準のJavascriptを使用して引数としてそれらを渡します(ここではトリッキーなことは何もありません)。

それが私がやる方法です。お役に立てば幸いです。

于 2011-11-29T18:52:53.227 に答える
1

これは、php値をエコーするのと同じくらい簡単です。
new Array(<?php echo $php_lat;?>, <?php echo $php_long;?>, icon0 etc...

于 2011-11-29T18:52:03.850 に答える
0

このjavascript配列の初期化で動的バナーを作成しました。javascriptがphpに埋め込まれている場合は正常に機能します。

    <?php
      // This is our php array with URLs obtained from the server
      $urlsPHP = ["img/img01.jpg","img/img02.jpg","img/img03.jpg"];

      return = "
        //...Some HTML...

        <script type='text/javascript'>

        // Now we use this inside the javascript
        var urlsJavaScript = ".stripslashes(json_encode($urlsPHP)).";

        //...Some javascript style to animate the banner...
        </script>
      ";


      // if we print this:
      echo stripslashes(json_encode($urlsPHP));
      // We obtain:
      // ["img/banner/bak01.jpg","img/banner/bak02.jpg","img/banner/bak03.jpg"]
      // This is a good syntax to initialize our javascript array


      // if we print this:
      echo json_encode($urlsPHP);
      // We obtain:
      // ["img\/banner\/bak01.jpg","img\/banner\/bak02.jpg","img\/banner\/bak03.jpg"]
      // This is not a good syntax to initialize our javascript URLs array
?>
于 2020-03-10T08:29:09.030 に答える