我有一个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);
但我不明白为什么我需要这样做。
答案 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>