如何在PHP端将数组字符串作为参数传递到JavaScript函数中?

3

我在Firebug控制台中收到了错误missing ) after argument list。

emissing ) after argument 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>

请查看我的更新,附有截图。 - Query Master
我尝试了所有的方法,但是在我的Firebug控制台中出现了错误:缺少参数列表后的括号)。 - Query Master
7个回答

2

代替

$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);
}

如何将我的char_data更改为像这样,实际上这个chart_data包含动态值。 - Query Master
从您的动态值创建字符串。 - Engineer

2
'<?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

与其在javascript中将字符串转换为数组,为什么不直接让PHP输出一个数组呢?

只需添加一个额外的[],javascript会将其解读为数组。

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

然后在输出中删掉引号(这些引号会导致错误信息)。
 dynamicChartArray('<?php echo $div;?>', <?php echo $chartdata;?>);

然后,myData可以直接等于chart data(因为它已经是一个数组)
var myData = chartdata;

1
代码在我的控制台上运行良好吗?您能否将由PHP输出(并导致错误的)JavaScript代码添加到您的帖子中吗?可能只是您的某个值存在问题,例如,如果引号中的一个值是“O'Neil”,则需要转义以防止它破坏JavaScript。 - Carl
感谢您与我分享您的经验。 - Query Master

1

将此更改为:

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

转换为:

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

然后看看它是否有效


1

看一下json_encode

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

这将生成一个JSON字符串,准备回显到您的脚本中

string(21) "[["NBA",1],["NFL",2]]"

1
你应该看一下输出结果,我敢打赌它是:
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
你不需要 var myData = new Array(chartdata);

chartdata 已经是一个数组。


@Samad,只需将“chartdata”传递到需要发送的位置即可。 - Starx
@Samad,在需要发送的地方简单地传递 chartdata - Starx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接