【问题标题】:How to pass PHP array parameter to Javascript Function?如何将 PHP 数组参数传递给 Javascript 函数?
【发布时间】:2011-09-24 00:45:54
【问题描述】:

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(查看源代码)。

标签: php javascript html client-server server-side-scripting


【解决方案1】:
<input type="submit" value="Test Javascript" onclick='showMovies(<?php echo json_encode($movies); ?>);' />

注意 json_encode,它为 Javascript 编码对象或数组(JSON 代表 JavaScript Object Notation),还要注意 ' 而不是 ",因为 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 代码混合在一起???我想将它们分开...请帮助我是初学者...
  • 注意 ' 而不是 ",因为 JSON 使用 " >> 这行适合我...谢谢
【解决方案2】:

试试这个

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

希望对你有帮助。

【讨论】:

    【解决方案3】:

    在输出前编码为 JSON。

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

    【讨论】:

    • 什么是json???这是原生 javascript 内置的东西还是我需要安装的插件?
    • 哇,伊格纳西奥,这太粗鲁了。 @Son of Man:您可以在 Google 上快速搜索“JSON”以了解 JSON 是什么。
    • 粗鲁期待别人为你做所有的研究。
    • 粗鲁将诚实的无知视为恶意。
    • 阅读我的回答。它比这更深入。
    【解决方案4】:

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

    这意味着要让您的 JavaScript 接收 PHP 值,您必须在编写 JavaScript 时将这些值嵌入其中。您必须至少将 PHP 与 JavaScript 混合一点点,以使在客户端上运行的东西能够从服务器获取任何数据。

    这就是所有 Web 服务器端脚本在所有语言中的工作方式。

    JavaScript 根本无法知道你的 movies 变量中发生了什么,除非你把它塞满了值,在 JavaScript 中。

    我建议您到@levu's answer 了解将 PHP 变量的值转换为 JavaScript 的好方法。

    【讨论】:

    • 通过PHP生成JavaScript代码是完全有效的,这就是问题中所做的。
    • 当然。 JS 可以位于单独的文件中,也可以位于 PHP 脚本返回的 HTML 中。但是实际值必须在 JS 中需要 JavaScript 的某个地方进行编码,例如事件属性或脚本标签。您实际上不能将 JavaScript 放入 PHP 中,反之亦然,因为两者都不会执行。你必须适当地来回切换。
    • @Ignacio 如果您真的认为您必须向我解释您“可以通过 PHP 生成 JavaScript”,那么您真的没有得到它!相信我,我解释它的方式是 OP 需要的。 @son 你对我们有什么意见吗?
    • 变量的值在哪里改变?
    • @Ignacio 你在说什么?如果要更改变量的值,请执行此操作。如果您希望客户端更改服务器上的数据,GET 或 POST 并读取数据。
    【解决方案5】:

    您可以通过 json_encode() php 函数在 js 中传递数组。json_encode() 会将数组转换为字符串。您可以通过在 js 中删除该字符串来获取数组。

    【讨论】:

      【解决方案6】:
      <?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)" >
      

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

      【讨论】:

        【解决方案7】:

        您还可以使用 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>';
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-11-07
          • 2011-10-02
          • 2016-01-16
          • 1970-01-01
          • 2011-06-20
          • 1970-01-01
          相关资源
          最近更新 更多