2014-10-12 4 views
0

Я выполняю итерацию по массиву для отображения некоторых данных и в то же время создаю еще один массив, который будет использоваться для создания JSON, а затем назначить его переменной JavaScript.Создание JavaScript-массива из HTML

<?php 
$otherStuff=array(); 
foreach($myArray AS $row) 
{ 
    echo("<tr data-id='{$row['id']}'><td>{$row['firstname']}</td><td>{$row['firstname']}</td></tr>"); 
    $otherStuff[$row['id']]=$row['otherStuff'];     
} 
echo('<script type="text/javascript">var otherStuff='.json_encode($otherStuff).';</script>'); 
?> 

Это не похоже на очень чистый способ выполнения этой задачи. Вместо этого я задаюсь вопросом, было бы лучше создать какой-то скрытый HTML, а затем clientide проанализировать его, чтобы создать желаемую переменную JavaScript.

Делает это так? Это хорошая идея, или я должен сделать что-то еще? Если возможно, как?

Спасибо

+0

Лично мне нравится, как вы делаете это сейчас, и я бы не изменил его. Это способ, который требует наименьших усилий и относительно чист и понятен. – GravityScore

+0

Если 'otherStuff' связан с данными строки HTML, почему бы не использовать атрибуты' data-'для хранения в связи с элементом' tr'? –

+0

@JaredFarrish Мне нравится идея, но возможно ли быть массивом? – user1032531

ответ

1

Вот элементарный пример:

$arr = array('stuff' => 'goes here'); 

echo "<div data-other-stuff='" . htmlspecialchars(json_encode($arr)) . "'></div>"; 

Производит:

<div data-other-stuff='{&quot;stuff&quot;:&quot;goes here&quot;}'></div> 

http://codepad.org/Bq5GZcVS

$('div').each(function ea(){ 
    // Some browsers/versions do not support JSON.parse(), try json2.js 
    var data = $(this).attr('data-other-stuff'), 
     _data = JSON.parse(data); 

    console.log(data, _data); 
}); 

Производит (в console):

'{"stuff":"goes here"}' Object {stuff: "goes here"} 

(Первый действительно строка, но я добавил одинарные кавычки, чтобы сделать это очевидно)

http://jsfiddle.net/0mv44jvd/1

Так же, как любой JSON-закодирован, вы должны повернуть. это в массив или объект, когда вы его потребляете. Но все это работает.

+0

Итак, 'eval' нужен? Данные безопасны, поэтому это не проблема. Просто параноик от всех тех людей, которые говорят: «eval - это зло! Никогда не используйте!» – user1032531

+0

См. [Этот ответ] (http://stackoverflow.com/a/4935684/451969), я просто не хотел беспокоиться о 'JSON.parse()'. Однако я использую рекомендованную библиотеку, которая [использует 'eval()' в качестве прокладки) (https://github.com/douglascrockford/JSON-js/blob/master/json2.js#L474). –

+0

Кажется, что в jQuery 'data()' метод автоматически обрабатывается. См. Http://jsfiddle.net/0mv44jvd/2/ – user1032531

Смежные вопросы