将PHP数组作为数组传递到外部Javascript函数

5

我正在做一些需要将php数组传递到外部javascript函数的事情。我目前正在进行一些测试,代码看起来像这样:

<input type="text" onclick="show_error_message('<?php echo $array_sample ?>')" readonly="readonly">

JavaScript函数如下:

function show_error_message(test) {
alert(test)
}

我的$array_sample包含数据,即array("1","2","3");,但返回的警报会是Array,每当我将$array_sample更改为$array_sample[0]时,在传递参数时,我得到一个数据,即1作为警报。我想知道如何将整个数组传递给JavaScript中的另一个数组,以便通过它来获取。正如您所看到的,我打算将其用作错误处理的弹出消息,这就是为什么我需要它是动态的原因。
3个回答

14

使用json_encode

onclick='show_error_message(<?php echo  json_encode($array_sample) ?>)'
或者
onclick="show_error_message(<?php echo htmlspecialchars(json_encode($array_sample)) ?>)"

注意,在PHP代码周围缺少引号('),这样会将一个数组直接传递给show_error_message而不是一个字符串。


哦,我明白了,在我的警告框中有一个返回值,它说函数Array() { [native code] }。使用您的第一个编辑,这个:onclick="show_error_message(<?php echo $array_sample ?>)",但是在我再次使用json_encode部分后,使用尚未编辑的javascript函数时,警告框不会出现。这正常吗? - KaHeL
@KaHeL 我不明白为什么它不能工作,你在控制台中有任何错误吗?你使用的是 PHP 版本 5.2 或更高版本吗? - Musa
哦,有一个错误。SyntaxError: "syntax error show_error_message([" 至于PHP,我正在使用5.3 64位wampserver,同时我也在使用codeigniter作为框架。这可能是问题的原因吗? - KaHeL
1
@KaHeL 我刚意识到字符串将会被编码为 ",这将会过早终止你的 onclick 属性,onclick="show_error_message(["1","2","3"])"。你可以在属性中使用单引号或在 PHP echo 中转义双引号。 - Musa
终于成功了!它显示了1、2、3。我想下一步是将传递的值包含到一个变量数组中,以便我完全控制它,我是正确的吗?此外,非常感谢你的帮助。 :) - KaHeL
显示剩余2条评论

5

使用json_encode()函数将PHP数组编码为JSON数据。

在Javascript中使用JSON.parse()来解析JSON字符串。


我明白了,我试图将我的onclick更改为onclick="show_error_message(<?php echo json_encode($array_sample) ?>)",并且JavaScript函数保持不变,但是在我点击文本框后,警报不会出现。 - KaHeL
尝试这样做:onclick="show_error_message(<?php echo "'".json_encode($array_sample)."'" ?>)" - Kalpesh Patel

4
下面的代码展示了如何将php数组传递给javascript:
<script type="text/javascript">
    function mufunc(a)
    {
        var temp = new Array();
        temp = a.split('~');
        for(i=0;i<temp.length;i++)
        {
            alert(temp[i]); 
        }
    }
</script>

<?php
    $a = array('a','b','c');
    $b = implode("~",$a);
?>
<a href="javascript:void(0)" onClick="mufunc('<?php echo $b; ?>')">Click Here</a>

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