Как передать строку массива в функцию JavaScript из конца PHP в качестве аргумента? - PullRequest
3 голосов
/ 19 марта 2012

Я получаю сообщение об ошибке отсутствует) после аргумента в моей консоли Firebug.

испуская) после аргумента http://a8.sphotos.ak.fbcdn.net/hphotos-ak-snc7/s720x720/393131_320846714645076_100001592501599_911297_470580896_n.jpg

Мой вопрос: как передать переменную $ char_data в функцию JavaScript в качестве аргумента

Определить переменную php:

<?php 
$chart_data = "['NBA',1],['NFL',2],['MLB',3],['NHL',4]"; 
$div = "graph";
?

Вызов функции JavaScript с определением аргумента

<script>
dynamicChartArray('<?php echo $div;?>','<?php echo $chartdata;?>')
</script>

Функция JavaScript

<script>
function dynamicChartArray(div,chartdata){
var myData = new Array(chartdata);
var myChart = new JSChart(div, 'pie');
alert(chartdata+div);
}
<script>

Ответы [ 7 ]

2 голосов
/ 19 марта 2012

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

Просто добавьте дополнительный набор [], который javascript читает как массив.

$chart_data = "[['NBA',1],['NFL',2],['MLB',3],['NHL',4]]"; 

затем отбросить кавычки на выходе (которые ответственны за появление сообщений об ошибках)

 dynamicChartArray('<?php echo $div;?>', <?php echo $chartdata;?>);

и тогда myData может просто равняться данным диаграммы (поскольку это уже массив)

var myData = chartdata;
2 голосов
/ 19 марта 2012
'<?php echo $chartdata;?>'

Это будет эхом '['NBA',1],['NFL',2],['MLB',3],['NHL',4]'. Обратите внимание, что внутри одинарных кавычек есть одинарные кавычки.

 new Array(chartdata)

Это будет просто массив с одним элементом, строка "['NBA',1],['NFL',2],['MLB',3],['NHL',4]".

Попробуйте сделать dynamicChartArray('<?php echo $div;?>',[<?php echo $chartdata;?>])

Это сделает chartdata массивом массивов.

2 голосов
/ 19 марта 2012

вместо

$chart_data = "['NBA',1],['NFL',2],['MLB',3],['NHL',4]"; 

Используйте

$chart_data = "[\"NBA\",1],[\"NFL\",2],[\"MLB\",3],[\"NHL\",4]"; 

Измените свой вызов на это:

dynamicChartArray('<?php echo $div;?>',[<?php echo $chartdata;?>])

И функция к этому:

function dynamicChartArray(div,chartdata){
var myData = chartdata;
var myChart = new JSChart(div, 'pie');
alert(chartdata+div);
}
1 голос
/ 19 марта 2012

Вы должны взглянуть на вывод. Могу поспорить, что это:

dynamicChartArray('graph','['NBA',1],['NFL',2],['MLB',3],['NHL',4]')

и вы уже видите, что у вас проблемы с кавычками.

Вместо создания строки я предлагаю создать массив и использовать json_encode:

$chart_data = array(
    array('NBA',1),
    array('NFL',2),
    array('MLB',3),
    array('NHL',4)
);

и

dynamicChartArray('<?php echo $div;?>', <?php echo json_encode($chartdata); ?>)

JSON также является допустимым JavaScript и дает вам больше возможностей для обработки данных на стороне сервера.

1 голос
/ 19 марта 2012

Взгляните на json_encode .

$chart_data = json_encode(array(array('NBA',1),array('NFL',2)));

, который выдаст строку json, готовую эхо в ваш скрипт

string(21) "[["NBA",1],["NFL",2]]"
1 голос
/ 19 марта 2012

Вам не нужно var myData = new Array(chartdata);.

chartdata - это уже массив.

1 голос
/ 19 марта 2012

измените это:

dynamicChartArray('<?php echo $div;?>','<?php echo $chartdata;?>')

на это:

dynamicChartArray('<?php echo $div;?>', [<?php echo $chart_data;?>]);

и посмотрите, работает ли оно

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