【问题标题】:Passing PHP array to Javascript array using implode(), join() or json_encode()使用 implode()、join() 或 json_encode() 将 PHP 数组传递给 Javascript 数组
【发布时间】:2012-04-08 04:09:00
【问题描述】:

我正在开发一个 Wordpress 插件,我需要将 PHP 数组传递给 Javascript 数组。我尝试过使用 join()、implode() 甚至 Json_encode。但是,wordpress 没有显示任何值。

在使用join()时,我使用了代码:

<?php
$php1 = array(1,2,3);

?>
<script language='Javascript'>
var lat = ["<?php echo join("\", \"", $php1); ?>"];
document.write(lat[1]);
</script>

如果在本地主机上使用(没有 wordpress),上面的代码提供了一个有效的输出。但是,不知何故,它不适用于 Wordpress。 “apache 错误日志”显示此消息:

PHP 警告:join() [function.join]:在第 129 行的 \wp-content\plugins\Animation\animation.php 中传递的参数无效,引用者:http://localhost/Website/wp-admin/options-general.php?page=js

implode() 也是如此。服务器错误日志显示与 implode() 相同的警告。

然后我使用下面的代码尝试了 json_encode:

var lat = <?php echo json_encode($php1); ?>;

但是返回no值。

编辑:我用于 JSON 的代码:

<?php
/*
Plugin Name: PHPToJavascript
*/
$arr = array(1,2,3,4,5,6,7,8,9);            //array to pass

add_action('admin_menu','admin_jav');

function admin_jav(){
add_submenu_page('options-general.php','Javarray','Javarray','manage_options','javarray',jav_handler);
}

function jav_handler(){
echo 'Into handler';

?>
<SCRIPT LANGUAGE = 'Javascript'><!--
var sm=<?php echo json_encode($arr); ?>;      //using Json  

document.write(sm[1]);                       //doesnt display any output!!!

</SCRIPT>
<?php
}
?>

请指导我完成这个。我很感激任何帮助。如果您能帮我将此 PHP 数组传递给 javascript 数组,那就太好了。

【问题讨论】:

  • 你的意思是如果你写alert(&lt;?php echo json_encode($php1) ?&gt;);,什么都不会发生?另请注意,language 属性已被弃用,建议改用type="text/javascript"
  • 好吧,我使用的是document.write() 而不是alert()。但是,我只想将数组$php1 的内容传递给数组lat,然后显示lat 的第一个元素。我使用了var lat = &lt;?php echo json_encode($php1); ?&gt;; document.write(lat[1]);,没有任何反应。
  • 试试 var ;否则我想你会做 var lat = "";然后将字符串转换成json
  • @solartic,什么? JSON JavaScript,你的第一句话与其他无关。
  • @Alex,那么你的问题不是 PHP,而是 JavaScript。 script 标签是否在 body 标签内?

标签: php javascript arrays wordpress


【解决方案1】:

$arr 变量超出范围。如果你想使用全局 $arr 变量,你需要修改你的 jav_handler() 函数,将变量带入本地范围:

function jav_handler(){
    global $arr;
    // ...

但是,最好的做法是尽可能避免使用全局变量,因此最好的做法是更改函数以将数组作为参数,并在调用函数时显式传递:

function jav_handler($arr){
    // ...
}

jav_handler($arr);

【讨论】:

    【解决方案2】:

    更改:

    var lat = ["<?php echo join("\", \"", $php1); ?>"];
    document.write(lat[1]);
    

    收件人:

    var lat = ["<?php echo join('", "', $php1); ?>"];
    document.write(lat[0]);
    

    【讨论】:

      【解决方案3】:

      代替:

      var lat = ["<?php echo join("\", \"", $php1); ?>"];
      

      我会尝试:

      var lat = "<?php echo json_encode($php1); ?>";
      

      此外,您可能希望使用提供适当 JS 调试的浏览器。在 chrome 中,您可以使用 console.log(lat); 来查看 lat 的确切含义

      【讨论】:

        猜你喜欢
        • 2014-06-11
        • 1970-01-01
        • 2017-10-07
        • 1970-01-01
        • 2011-05-16
        • 2012-06-26
        • 1970-01-01
        • 1970-01-01
        • 2021-02-10
        相关资源
        最近更新 更多