2010-09-15 6 views
3

Каков наилучший способ обработки смешивания PHP в Javascript? Разве это не должно быть сделано? Должно ли это быть сделано определенным образом? Я работаю над проектом, и я нашел следующий яваскрипт функции:Использование PHP в функциях Javascript

function getStuff() { 
       <?php 
       $stuff = "0:Select"; 
       foreach ($this->stuff as $k => $v){ 
        $stuff = $stuff . ";" . $v['stuff_id'] . ":" . $v['stuff_name']; 
       } 
       ?> 

       return "<?= $stuff ?>"; 
      } 

Предполагая, что мне нужно данные о том, что PHP является обеспечением того, что это идеальный способ, чтобы получить его? Мне это не похоже, но человек, который написал это, - мой босс, поэтому я хочу спросить, прежде чем пытаться его изменить.

FYI, этот JS используется в сценарии представления, а данные для $this->stuff передаются от контроллера, который его использует.

ответ

3

Отличный способ сделать это, чтобы подготовить данные к JSON, а затем сделать его переменной на странице. Вы можете иметь сложные структуры (ассоциативные массивы, полные массивов n -deep), и иметь представление, представленное как литерал объекта в javascript.

В общем, вы правы, чтобы иметь отвращение к прыжкам в и из таких тегов PHP. Это уродливо и довольно сложно читать/поддерживать.

+0

Так что если я json кодирую данные и вставляю их в переменную, как мне попасть в свой javascript? Например, у моего PHP-скрипта есть функция, которая собирает данные, json кодирует ее и возвращает ее в представление как '$ foo'. В представлении мне нужно получить доступ к нему как $ this-> foo, но как его использовать с моим javascript? – Lothar

1

Это довольно ужасно, лучший способ это сделать это запросить данные в течение запроса Ajax, в подходящем формате (например, JSON)

Для расширения почему это «ужасно». Очевидно, что эта функция была построена быстро-грязным способом, чтобы выполнить эту работу, этому подходу препятствует постоянная отладка и поддержание функции. Разделение доставки серверных данных и обработки на стороне клиента помогает упростить и упростить отслеживание.

1

Существует так много способов смешивания ur js с PHP. Одна вещь, которую вы всегда помните:

Ваш PHP выполняется первым на сервере, прежде чем JS будет выполнен.

Похоже, вы пытаетесь динамически добавлять что-то в свой selectbox. Если это так, вы можете сделать что-то вроде этого

<?php 
function createSelectbox($selItems) { 
    $selTxt = "<select>"; 

    foreach ($selItems as $id => $value) 
     $selTxt .= "<option id='" .$id. "'>". $value. "</option>"; 

    $selTxt .="</select>"; 

    return $selTxt; 
} 


?> 
<html> 
    <head> </head> 
<body> 
<?php 
$selItems = Array(1 => "One", 2 => "Two", 3=> "Three"); 
echo createSelectbox($selItems); 
?> 
</body> 
</html> 
+0

Выбранный элемент является частью динамической сетки, сгенерированной jQuery, поэтому это необходимо сделать в javascript. – Lothar