如何将PHP数组参数传递给Javascript函数?

4

index.php

<script type="text/javascript" src="javascript.js"> </script>
<?php
 $movies = array("Bloodsport", "Kickboxer", "Cyborg", "Timecop", "Universal Soldier", "In Hell", "The Quest");
?>

<input type="submit" value="Test Javascript" onclick="showMovies(<?php echo $movies; ?>);" />


javascript.js

function showMovies(movies) {
 alert(movies.length);

 return false;
}

我刚开始学习编程,所以对于这个问题很难解决,但这对于你们来说显然很简单。

当我点击提交按钮时,它显示数组大小为1,但我认为应该是7。这是怎么回事呢?


查看浏览器中生成的HTML / JavaScript(查看源代码)。 - deceze
7个回答

10
<input type="submit" value="Test Javascript" onclick='showMovies(<?php echo json_encode($movies); ?>);' />

请注意json_encode函数,它可以将对象或数组编码为JavaScript使用的格式(JSON代表JavaScript对象表示法),以及注意使用单引号'而不是双引号",因为JSON使用双引号"

然而,这个解决方案会更好:

<script type="text/javascript">
    document.getElementByID('submitButton').onclick = function() {
        var movies = <?php echo json_encode($movies); ?>;
        showMovies(movies);
    };
</script>
...
<input type="submit" value="Test JavaScript" id="submitButton">

你的意思是我必须把我的javascript和php代码混合起来吗?我想要把它们分开... 请帮帮我,我是个初学者... - Son of Man
这行代码对我来说有效...谢谢 - Atul

4
请尝试这个:
PHP代码
<script type="text/javascript" src="javascript.js"> </script>
<?php
  $movies = array("Bloodsport", "Kickboxer", "Cyborg", "Timecop", "Universal Soldier", "In Hell", "The Quest");
  $mov_str = implode(",", $movies);
?>

<input type="submit" value="Test Javascript" onclick="showMovies('<?php echo $mov_str; ?>');" />

在Javascript文件中
function showMovies(movies) {
  movies = movies.split(",");
  alert(movies.length);
 return false;
}

输出

7

希望这能对您有所帮助。


2

在输出之前将数据编码为JSON格式。

<input type="submit" value="Test Javascript" onclick="showMovies(<?php echo json_encode($movies); ?>);" />

什么是JSON?它是原生JavaScript内置的东西还是我需要安装的插件? - Son of Man
3
哇,伊格纳西奥,那很粗鲁。 @人子:你可以在谷歌上快速搜索“JSON”来了解JSON的基本概念。 - Joel
2
不礼貌是期望别人为你做所有的研究工作。 - Ignacio Vazquez-Abrams
3
粗鲁的行为是把诚实的无知当作恶意。 - ErikE
1
请阅读我的回答,它比那更深入。 - ErikE
显示剩余9条评论

1
<?php
  $movies = array("Bloodsport", "Kickboxer", "Cyborg", "Timecop", "Universal Soldier", "In Hell", "The Quest");
  $str=implode(",",$movies);
?>
<script type="text/javascript" >
  var arr=new Array();
  var str="<?php echo $str; ?>";
  arr=str.split(',');
  //alert(arr.toSource());
  function showMovies(movies) {
    alert(movies.length);
    return false;
  }
</script>

<input type="submit" value="Test Javascript" onclick="showMovies(arr)" >

嘿,请使用上面的代码以获得您想要的结果。这是经过测试的代码。


1

你的PHP变量只存在于服务器上,与客户端的JavaScript变量完全分离。从服务器向客户端传递值的唯一机制是通过网页内容(或通过特别请求的幕后网络内容通过AJAX)。

这意味着要使JavaScript接收PHP值,您必须编写包含这些值的JavaScript代码。您必须至少在JavaScript中混合PHP以获取在客户端运行的内容从服务器获取任何数据。

这就是所有语言中所有Web服务器端脚本的工作原理。

除非你在JavaScript中填充它的值,否则JavaScript根本不知道movies变量中有什么。

我建议你查看@levu's answer,以了解将PHP变量值传递到JavaScript的好方法。


在编程中,通过PHP生成JavaScript代码是完全有效的,这也是问题所做的。 - Ignacio Vazquez-Abrams
当然可以。JS可以在一个单独的文件中或从PHP脚本返回的HTML中。但是实际值必须在JS中编码,可以放在JavaScript预期的某个位置,例如事件属性或脚本标记中。你不能将JavaScript放入PHP中,反之亦然,因为两者都不会执行。你必须适当地切换回去和切换。 - ErikE
@Ignacio,如果你真的认为你必须向我解释“可以通过PHP生成JavaScript”,那么你真的没有理解!相信我,我解释的方式就是OP所需要的。@son,你有什么建议吗? - ErikE
变量的值何时会改变? - Ignacio Vazquez-Abrams
@Ignacio 你在说什么?如果你想改变一个变量的值,那就去改变它。如果你想让客户端改变服务器上的数据,使用GET或POST并读取数据即可。 - ErikE

1

你可以通过php的json_encode()函数将数组传递给js。json_encode()会将数组转换为字符串。你可以在js中分离该字符串以获取数组。


0

你也可以使用json_encode()函数将数组解析为JavaScript。

$array = array('1','a','b');

echo '<script type="text/javascript">';
echo 'var x = ' . json_encode($array) . ';';
echo '</script>';

这也适用于关联数组:

$array = array("x" => '1',"y" => 'a',"z" => 'b');
echo '<script type="text/javascript">';
echo 'var x = ' . json_encode($array) . ';';
echo '</script>';

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