【问题标题】:how to pass array string in JavaScript function from PHP end as a argument?如何从 PHP 端传递 JavaScript 函数中的数组字符串作为参数?
【发布时间】:2012-04-04 07:18:45
【问题描述】:

我在我的 Firebug 控制台中的参数列表后收到错误 missing )。

emissing ) after argument http://a8.sphotos.ak.fbcdn.net/hphotos-ak-snc7/s720x720/393131_320846714645076_100001592501599_911297_470580896_n.jpg

我的问题是如何在 JavaScript 函数中将 $char_data 变量作为参数传递

定义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>

【问题讨论】:

  • 用截图查看我的更新
  • 在我的 Firebug 控制台中的参数列表之后,我尝试了所有的东西,但缺少错误)。

标签: php javascript charts arguments


【解决方案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,它为您提供了更多在服务器端处理数据的可能性。

【讨论】:

    【解决方案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 包含动态值
    • 从动态值创建字符串
    【解决方案3】:

    看看json_encode

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

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

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

    【讨论】:

      【解决方案4】:

      与其在 javascript 中从字符串创建数组,不如直接让 PHP 将其作为数组输出?

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

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

      然后放弃输出中的引号(导致错误消息的原因)

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

      然后 myData 可以等于图表数据(因为它已经是一个数组)

      var myData = chartdata;
      

      【讨论】:

      • 代码在我的控制台中运行良好?您是否能够将 PHP 输出的 javascript 代码(并导致错误)添加到您的帖子中?可能只是您的一个值有问题,例如,如果引号中的一个值是“O'Neil”,则需要转义以阻止它破坏 javascript。
      • 感谢您与我分享您的经验
      【解决方案5】:

      你不需要var myData = new Array(chartdata);

      chartdata 已经是一个数组了。

      【讨论】:

      • @Samad,只需将chartdata 传递到需要发送的位置即可。
      • @Samad,只需将chartdata 传递到需要发送的位置。
      【解决方案6】:
      '<?php echo $chartdata;?>'
      

      这将回显'['NBA',1],['NFL',2],['MLB',3],['NHL',4]'。请注意单引号中的单引号。

       new Array(chartdata)
      

      这只会创建一个数组,其中包含一个元素,即字符串 "['NBA',1],['NFL',2],['MLB',3],['NHL',4]"

      试试dynamicChartArray('&lt;?php echo $div;?&gt;',[&lt;?php echo $chartdata;?&gt;])

      这将使chartdata 成为一个数组数组。

      【讨论】:

        【解决方案7】:

        改变这个:

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

        到这里:

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

        看看有没有效果

        【讨论】:

          猜你喜欢
          • 2021-07-24
          • 2020-05-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-15
          • 1970-01-01
          • 2016-08-08
          • 2020-01-01
          相关资源
          最近更新 更多