2011-11-29 3 views
3

Все, У меня есть следующий фрагмент кода:Использование PHP для заполнения массива яваскрипта

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 с координатами lat/long вместе с некоторыми другими значениями. Скажем, у меня есть три записи, для которых я хочу создать маркеры. Как передать функцию addPoints в формате lat/long, которую я получил из своей базы данных, чтобы я мог правильно использовать ее в этой функции?

Я обновил свой код, чтобы выглядеть следующим образом для 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 и просто выводить, например, координаты lat. Я получаю следующий результат:

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

Каковы правильные координаты в моем массиве. Однако маркеры не создаются. Любые идеи о том, что делать дальше или что я делаю неправильно?

ответ

2

PHP выполняет на сервере перед отправкой клиенту. Для этого, если вы можете сделать что-то вроде этого:

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

Где $lattitude и $longitude ценности, которые вы вытащили из вас базы данных с PHP.

Когда эта страница запрашивается клиентом, выполняется ваш php-код, реальные значения подключаются туда, где эти теги php делают его похожим на предоставленный вами пример, а затем он отправляется клиенту.

Если вы хотите изменить эти значения с помощью JS на клиенте или получить новые с сервера, дайте мне знать, и я добавлю пример этого.

EDIT:

Хорошо, в свете ваших комментариев, это звучит, как у вас есть несколько вариантов. Вот один из них:

Когда пользователь выбирает категорию (рестораны, бары и т. Д.), Вы передаете эту категорию в качестве параметра url и загружаете либо всю страницу, либо просто ее часть карты (в зависимости от вашей настройки, но может стоит исследовать). Ваша ссылка будет выглядеть примерно так:

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

Maps.PHP готов поймать категорию с помощью $_GET массива:

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

РНР затем захватывает соответствующие данные о местоположении из базы данных (я оставлю эту часть для вас) и засовывает ее в переменной, что ваш 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 (здесь ничего сложного).

Так я и сделал бы это. Надеюсь, это поможет!

+0

У меня есть петля для отображения вещей на моей странице. Я отправлю различные координаты. Мне нужно передать переменные функции addpoints, такие как addPoints (, , , Icon0, 'Place', 'Content to open')? – user1048676

+0

Я думаю, я вижу, где вы собираетесь с этим, но позвольте мне спросить, прежде чем дать вам длинный ответ: 1) Кажется, вам нужно пройти в новых координатах, когда пользователь взаимодействует с картой. Это верно? 2) Я предполагаю, что вы хотите получить координаты с сервера, когда они вам понадобятся, а не загружать все возможные координаты при первой загрузке вашей страницы. Это верно? – Ian

+0

Итак, мои сценарии говорят, что я загружаю рестораны, и их 10. Я пытаюсь пройти в лат/долго каждый из них, чтобы создать маркеры. Тогда пользователь может выбрать бары, а затем мне придется пройти в 15 координатах и ​​т. Д. Я пытаюсь сделать это из PHP-скрипта, потому что я делаю другие вещи с почтовыми индексами и т. Д. – user1048676

1

Это так же просто, как повторение значений php.
new Array(<?php echo $php_lat;?>, <?php echo $php_long;?>, icon0 etc...

6

Простой и чистый способ передать массив из PHP на JavaScript - это просто echo версия массива json_encode.

$array = array(1,2,3,4,5,6); 
echo 'var values = '.json_encode($array).';'; 
+0

я попытался сделать это в моем PHP: <тип скрипта = "текст/JavaScript"> \t \t \t \t \t \t \t \t \t \t addPoints ('0', , , 'Content to open'); \t \t \t \t \t \t \t \t \t Тогда я обновил свои addPoints принять эти аргументы – user1048676