从JavaScript访问PHP数组

时间:2010-09-30 19:53:32

标签: php javascript html

我有以下代码,我声明了一个PHP数组变量,在函数内部,我将一些数据放入数组中。我还显示映射到数组的每个索引的按钮,这些按钮将在PHP数组中显示该索引号的数据。

在浏览器上测试时,我得不到正确的答案。我检查了页面源代码,它的代码类似于data_array = ["<?php echo implode ('',Array); ?>"];,而不是数组中的文本。

我做错了什么,我该怎么做才能获得正确的输出? (顺便说一句,我试图在不声明功能的情况下执行同样的操作,它似乎有效,但我需要一个功能来完成我的工作而不能采用这种方法。)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
<html lang="en">
    <head>
        <title>Example</title>

        <?php
            $giant_says = array();

            function display()  {
                global $giant_says;

                $giant_says[] = "<a href='http://www.google.com'>Google</a>";
                $giant_says[] = "Yahoo!";
                $giant_says[] = "Bing";

                echo "<div id='content'>";
                echo $giant_says[0];
                echo "</div><br><br>";

                $i = 0;
                while($i < count($giant_says))  {
                    echo "<input type='button' value='".$i."' onClick=\"addtext(".$i.");return false;\"";
                    $i += 1;
                }
            }
        ?>

        <script type="text/javascript">
          function addtext(index) {
              giantSays = ["<?php echo implode ('","', $giant_says); ?>"];
              document.getElementById('content').innerHTML = giantSays[index];
          }
        </script>
    </head>

    <body>
        <?php
            display();
        ?>
    </body>
</html>

3 个答案:

答案 0 :(得分:4)

您的订单错误,导致implode()压缩空数组。我还建议使用json_encode()代替implode()。它存在于此类事物中 - 更新示例如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
<html lang="en">
<head>

  <title>Example</title>

  <?php

  $giant_says = array();

  function display(&$giant_says)  {

    // Calculate the array (referenced)

    $giant_says[] = "<a href='http://www.google.com'>Google</a>";
    $giant_says[] = "Yahoo!";
    $giant_says[] = "Bing";

    // Return the HTML, to display later

    ob_start();

    echo "<div id='content'>";
    echo $giant_says[0];
    echo "</div><br><br>";

    $i = 0;
    while($i < count($giant_says))  {
      echo "<input type='button' value='".$i."' onClick=\"addtext(".$i.");return false;\">";
      $i += 1;
    }
    $Return = ob_get_contents();
    ob_end_clean();
    return $Return;
  }

  $Display = display($giant_says);

  ?>

  <script type="text/javascript">
    function addtext(index) {
        giantSays = <?php echo json_encode($giant_says); ?>;
      document.getElementById('content').innerHTML = giantSays[index];
    }
  </script>

</head>

<body>

  <?php
    echo $Display;
  ?>

</body>
</html>

答案 1 :(得分:2)

您在填充之前试图破坏$giant_says数组(在内爆之前,您需要在之后调用display())。

答案 2 :(得分:1)

问题是你调用了显示方法,在发出javascript的html部分之后填充内容。

html代码“喜欢”从你的php制作一个“echo'html'”。您的html已经处理,但未调用显示方法。在html代码之前调用方法。

示例:

<?php 
    $giant_says = array();
    $giant_says[] = "<a href='http://www.google.com'>Google</a>";
    $giant_says[] = "Yahoo!";
    $giant_says[] = "Bing"; 

    function display()  {
        global $giant_says;
        echo '<div id="content">'.$giant_says[0]."</div><br><br>";
        $i = 0;
        while($i < count($giant_says))  {
          echo "<input type='button' value='".$i."' onClick=\"addtext(".$i.");\" />";
          $i += 1;
        }  
    }
?>
<html>
    <head>
        <title>Example</title>
        <script type="text/javascript">
          function addtext(index) {
             giantSays = ["<?php echo implode ('","', $giant_says); ?>"];
             document.getElementById('content').innerHTML = giantSays[index];
             return false;
          }
       </script>
    </head>
    <body>
        <?php  display(); ?>
    </body>
 </html>