无法将PHP数组传递给Javascript

时间:2013-09-17 23:24:17

标签: javascript php json

我有一个json_encoded PHP数组,我想传递给Javascript:

$unmatched = json_encode(compareCourseNum($GLOBALS['parsed_courseDetails'], get_course_num_array($GLOBALS['bulletin_text'])));

$GLOBALS['unmatched'] = $unmatched;

print "<center><strong>Total number of courses parsed: $number_of_courses/" . "<span onClick=\"show_array(<?php echo $unmatched; ?>);\">" . count_courses($GLOBALS['bulletin_text']) . "</span>" . "</strong></center>";

然而,当我运行脚本时,打印的内容是:

Total number of courses parsed: 98/);">108

Javascript也不起作用。应该打印的是:

Total number of courses parsed: 98/108

当我点击“108”时,通过显示数组元素的警告,Javascript应该可以工作。

我该如何解决这个问题?

这是Javascript:

function show_array (array) {

    //var array = <?php echo $unmatched; ?>;
    alert();
    var result = "",
        length = array.length;
    for (var i = 0; i < length; ++i) {
        result += array[i] + "\n";
    }
    alert(result);
}

更新:我删除了php标签和分号,现在它已经

"<span onClick="show_array( $unmatched);">"

但show_array仍未运行!当我查看页面源时,我看到了:

"<span onClick="show_array( ["220","221","242E","249B","250","254","255","256","256S","272A","285"]);">"

请帮忙吗?我知道show_array的代码没有问题,但是使用数组输入,因为当我传递像[133,234,424]这样的数值数组时,它可以工作,但不能用字符串输入。

UPDATE2:

好的,我设法通过用单引号替换json_encoded数组中的双引号来使Javascript工作:

$unmatched = str_replace('"', '\'', $unmatched);

但我不明白为什么我需要这样做。

3 个答案:

答案 0 :(得分:1)

...onClick=\"show_array(<?php echo $unmatched; ?>);\">" . count_courses($GLOBALS['bulletin_text']) . "</span>" . "</strong></center>";

应该是

...onClick='show_array($unmatched);'>" . count_courses($GLOBALS['bulletin_text']) . "</span>" . "</strong></center>";

即删除开放的关闭php标签和分号,你已经处于php解析模式。

答案 1 :(得分:1)

您可以尝试使用JSON_NUMERIC_CHECK作为json_encode()中的第二个参数(需要PHP&gt; = 5.3.3)。

另一种选择是在JavaScript中使用parseInt()

result += parseInt(array[i], 10);

答案 2 :(得分:0)

下面的html有两个重要部分。第一个显示最小的PHP,主要是文字标记。第二个包含围绕第一个内容的php包装器。

为简单起见,我用文字替换了一些代码。

<html>
  <head>
    <script>
      function show_array (array) {
        var result = "",
        length = array.length;
        for (var i = 0; i < length; ++i) {
          result += array[i] + "\n";
        }
        alert(result);
      }
    </script>
  </head>
  <body>
    <?php $unmatched = json_encode(array(1,2,3,4,5)); ?>

    <!-- Minimal php, only to pass the php array to JavaScript. -->
    <center><strong>
      Total number of courses parsed: 
      <span onClick="show_array(<?php echo $unmatched ?>)">
        15
      </span>
    </strong></center>

    <!-- Wrapper in php. 
         1. Wrap the previous markup in an echo.
         2. Escape the double quotes.
         3. Remove the php stuff around $unmatched.
         4. Profit.
    -->
    <?php echo "
    <center><strong>
      Total number of courses parsed: 
      <span onClick=\"show_array( $unmatched )\">
        15
      </span>
    </strong></center>
    "; ?>

  </body>
</html>