-1

我有一个要传递给 Javascript 的 json_encoded PHP 数组:

$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] 这样的数字数组时,它可以工作,但不适用于字符串。

更新2:

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

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

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

4

3 回答 3

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 解析模式。

于 2013-09-17T23:33:26.677 回答
1

您可以尝试将其用作(Requires PHP >= 5.3.3)JSON_NUMERIC_CHECK中的第二个参数。json_encode()

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

result += parseInt(array[i], 10);
于 2013-09-18T00:54:54.230 回答
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>
于 2013-09-18T00:17:07.027 回答