Запись в массив JavaScript в цикле PHP - PullRequest
2 голосов
/ 11 марта 2010

У меня есть цикл php, который отображает значения геолокации. Как я могу заставить его записать эти значения в массив javascript, чтобы я мог затем использовать их для построения точек на холсте HTML5?

Цикл php выглядит следующим образом

<ul id = "geo-list">
    <?php foreach($data as $phrase) { ?>
        <li><?php
            if ($phrase->geo != false) {
                echo " | From (";
                echo $phrase->geo->coordinates[0];
                echo ",";
                echo $phrase->geo->coordinates[1];
                echo ")";
            } else {
                echo " | No Location Data";
            }
        ?>
        </li>
    <?php  } ?>
</ul>

Ответы [ 4 ]

5 голосов
/ 11 марта 2010

Вы пробовали

var myJavascriptData = <?= json_encode($php_data) ?>;
2 голосов
/ 11 марта 2010

Возможно, вы захотите воспользоваться библиотекой JSON для PHP.

0 голосов
/ 11 марта 2010

Мое предложение состоит в том, чтобы выгрузить блок скрипта в выходной файл и установить в нем переменную.

Определение массива фактически должно быть в коде javascript, который выводит страницу.

например, вам понадобится что-то вроде:

<script type="text/javascript">
    var coords = new Array(2);
    coords[0] = new Array(2);
    coords[0][0] = 123.45;
    coords[0][1] = 987.65;
    coords[1] = new Array(2);
    coords[1][0] = 234.56;
    coords[1][1] = 876.54;
</script>

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

Более эффективным способом (с точки зрения кода) было бы создание строки, определяющей буквенный массив, а затем выгрузка определения javascript. Вывод будет что-то вроде:

<script type="text/javascript">
    var coords = [[123.45,987.65],[234.56,876.54]];
</script>

так что в вашем цикле внутри php вы должны создать строку, которая в конечном итоге будет содержать var coords = [[123.45,987.65],[234.56,876.54]]. Вне вашего цикла вы оборачиваете его в блоки скриптов и выводите на страницу.

0 голосов
/ 11 марта 2010

Самый простой способ передать данные в JavaScript-программу браузера - поместить их в «скрытую» HTML-таблицу.

HTML должен выглядеть примерно так:

echo "\n<TABLE style='display: none;' id='DATTAB' >" ;
get_rows();
while ($cf = next_row()) {
    echo "\n <TR>";
    echo "\n<TD>" . $cf['KEY'] . "</TD>";
    echo "\n<TD>" . $cf['COL1'] . "</TD>";
    echo "\n<TD>" . $cf['COL2'] . "</TD>";
    echo " </TR>";
  }
  echo "\n</TABLE>";

Эта таблица легко доступна из вашего javascript: -

var dtab = document.getElementById("DATATAB");
var rows  = dtab.getElementsByTagName("tr"); 
for (var r = 0; r < rows.length ; r++) {
   row = rows[r];
   item_key  = row.cells[0].innerHTML;
   item_col1 = row.cells[1].innerHTML;
   item_col2 = row.cells[2].innerHTML;
   // do your thing here ......
}

В качестве альтернативы вы можете посмотреть на использование библиотек AJAX, таких как prototype или dojo которые имеют все компоненты javascript для доступа к данным из службы типа "REST".

Затем вам нужно написать отдельную службу, которая получает XML или JSON, необходимые для вашей страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...