最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Access a PHP array from JavaScript - Stack Overflow

programmeradmin1浏览0评论

I have the following code where I declare a PHP array variable and inside a function, I put some data into the array. I also display buttons mapped to each index of the array that will show the data in the PHP array for that index number.

When testing on a browser, I don't get the right answer. I checked the page source, it had code like data_array = ["<?php echo implode ('',Array); ?>"]; instead of the text from the Array.

What am I doing wrong and what should I do to get the correct output? (BTW, I tried to execute the same without declaring the function and it seemed to work, but I need a function for my work and can't take that approach).

<!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=''>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>

I have the following code where I declare a PHP array variable and inside a function, I put some data into the array. I also display buttons mapped to each index of the array that will show the data in the PHP array for that index number.

When testing on a browser, I don't get the right answer. I checked the page source, it had code like data_array = ["<?php echo implode ('',Array); ?>"]; instead of the text from the Array.

What am I doing wrong and what should I do to get the correct output? (BTW, I tried to execute the same without declaring the function and it seemed to work, but I need a function for my work and can't take that approach).

<!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.'>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>
Share Improve this question edited Apr 11, 2011 at 21:49 Peter Mortensen 31.6k22 gold badges110 silver badges133 bronze badges asked Sep 30, 2010 at 19:53 user429113user429113 351 silver badge7 bronze badges 1
  • (reference) json_encode — Returns the JSON representation of a value – Gordon Commented Sep 30, 2010 at 20:15
Add a ment  | 

3 Answers 3

Reset to default 4

You have the order wrong, which is causing the implode() to press an empty array. I also suggest using json_encode() instead of implode(). It exists for this type of thing - updated example below:

<!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.'>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>

You're trying to implode the $giant_says array before you've filled it (you're calling display() after the implode when the call needs to happen before).

The problem is that you call the display method, that fills the content after the html part with the javascript is sended.

the html code is "like" making an "echo 'html'" from your php. Your html is already processed but the display method is not called. call the method before the html code.

Example:

<?php 
    $giant_says = array();
    $giant_says[] = "<a href='http://www.google.'>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>
发布评论

评论列表(0)

  1. 暂无评论