2014-10-06 2 views
0

Мне нужно получить и повторить мои данные из mysql, внутри javascript-кода.Повторить PHP внутри кода Javascript

Javascript Код:

var chart = c3.generate({ 
data: { 
    columns: [ 
     ['data1', 30, 200, 100, 400, 150, 250, 50, 100, 250] 
    ] 
}, 
axis: { 
    x: { 
     type: 'category', 
     categories: ['cat1', 'cat2', 'cat3', 'cat4', 'cat5', 'cat6', 'cat7', 'cat8', 'cat9'] 
    } 
}}); 

Мне нужно изменение 'cat1', 'cat2', 'cat3' ... для данных MySQL. Я использую этот код, чтобы получить и повторить информацию:

<?php do { ?> 
     <?php echo $row_cat['category_name']; ?> 
<?php } while ($row_cat = mysql_fetch_assoc($cat)); ?> 

Это прекрасно работает для меня, но я не могу использовать это внутри яваскрипт кода. Вы знаете, как я могу сделать эту работу?

Спасибо.

+0

Почему бы не читать ваши данные в соответствующий массив, а затем выводить в JavaScript с помощью 'эхо json_encode ($ массив)'? –

ответ

1

Я бы лично просто построить структуру данных в PHP, а затем выход в JavaScript как переменную через json_encode. Так что-то вроде:

$cat_names = array(); 
while ($row_cat = mysql_fetch_assoc($cat)) { 
    $cat_names[] = $row_cat['category_name']; 
} 

Тогда в JavaScript:

var categories = <?php echo json_encode($cat_names);)?>; 
var chart = c3.generate({ 
    data: { 
     columns: [ 
      ['data1', 30, 200, 100, 400, 150, 250, 50, 100, 250] 
     ] 
    }, 
    axis: { 
     x: { 
      type: 'category', 
      categories: categories 
     } 
    } 
}); 

Это намного чище и легче читать, чем пытаться повторить из HTML/JavaScript источник с каждой итерации базы данных чтения цикла.

Обратите внимание на изменение вдали от do ..., хотя я не знаю, почему вы использовали бы эту структуру здесь для чтения данных из базы данных. Вы также не должны использовать функции mysql_*, но это еще одна история ...

+0

Большое вам спасибо! – Marcos

-1

Вы можете сделать это:

<?php $cats=array(); do { ?> 
    <?php $cats[] = '"'.$row_cat['category_name'].'"'; ?> 
<?php } while ($row_cat = mysql_fetch_assoc($cat)); ?> 

var chart = c3.generate({ 
data: { 
    columns: [ 
     ['data1', 30, 200, 100, 400, 150, 250, 50, 100, 250] 
    ] 
}, 
axis: { 
    x: { 
     type: 'category', 
     categories: [<?=implode(",", $cats)?>] 
} 
}}); 
+2

Вы должны действительно использовать json_encode для написания json. Это так легко сделать неправильно. – OIS

+0

OIS, я действительно добавил одиночные кавычки в $ cats [] = "'". $ Row_cat [' category_name ']. "'". Поэтому ваше редактирование не работает. Я прекрасно понимаю, что json_encode будет приятнее - это просто не то, что он просит. Он также может создать веб-службу и получить данные с помощью запроса ajax. Я просто дал простой способ приблизиться к нему, объединив два своих фрагмента кода выше. – cjs1978

+0

Ahh, не видел этого жаль. (btw всегда использует «вокруг строк в json») – OIS

0

Я бы сделал что-то вроде этого, но это добавит jQuery ... Код javascript будет в файле javascript не встроенным, как это , И, конечно же доктриной/PDO вместо mysql_ команд ...

<?php 
$cats = []; 
while ($row_cat = mysql_fetch_assoc($cat)) { 
     $cats[] = $row_cat['category_name']; 
} 

$charData = [ 
    "data" => [ 
     "columns" => [ 
      ["data1", 30, 200, 100, 400, 150, 250, 50, 100, 250] 
     ] 
    ], 
    "axis" => [ 
     "x" => [ 
      "type" => "category", 
      "categories" => $cats, 
     ] 
    ] 
]; 
?> 
<script type="application/json" class="chardata"><?=json_encode($charData)?></script> 
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<script type="text/javascript> 
jQuery(function($) { 
    $("script.chardata").each(function(i) { 
     window.chart = window.chart || []; 
     window.chart[i] = c3.generate($.parseJSON($(this).html())); 
    }); 
}); 
</script> 
Смежные вопросы