这类似于PHP generated content inside Javascript breaking script,但我无法理解我错在哪里。
以下是简报。我试图将MySQL DB中的10个字符串输出到javascript数组中,(s [1]到s [10])(存储在pt1到pt1列的一个MySQL表中 - info所以代码是可以理解的) 。 (注意$ apos只是撇号字符串 - 这里不是问题。)
<?php
echo "<script>\n";
echo "var s = [];\n";
for($i=1;$i<=10;$i++) {
echo "s[".$i."] = ".$apos.$r['pt'.$i].$apos.";\n";
}
echo "</script>";
?>
当我通过查看来源&#39;查看来源时,它会生成正确的代码。在浏览器中:
<script>
var s = [];
s[1] = 'a';
s[2] = 'b';
.
.
s[10] = 'j';
</script>
但是,这并不适用于脚本(这意味着如果我检查了Google开发人员工具,并且我点击了&#39;脚本标记元素中的内容,则会告诉他们&# 39;文字&#39;,而不是&#39;脚本&#39;在下面的栏中)。
但是,如果我删除PHP,并以相同的方式手动编写整个脚本,它的工作正常。我试过删除PHP代码中的\ n换行符,但仍然是同样的问题。
PHP中的某些内容破坏了脚本。你能帮忙吗?
答案 0 :(得分:0)
我最好的猜测是你的一个(或多个)字符串包含一个打破PHP输出的字符(例如撇号)。 Passery在你的评论部分已经提出了最好的解决方案:
echo '<script>';
echo 'var s = ' . json_encode($info);
echo '</script>';
答案 1 :(得分:0)
我认为您可能误读了开发人员工具。当我仔细查看Chrome时,它确实将您的脚本标识为文本,可能是因为默认类型为text/javascript
。在<script>
标记上放置明确的类型声明没有任何变化。
但是,当我在for循环后添加echo "alert('s[1]='+s[1]);";
时,会显示警告,并且我能够使用调试器查看其他s [i]的值。
换句话说,我认为你生成的JavaScript一直都在运作。
我知道你已经用另一种方式解决了这个问题。我发布这个答案只是为了能帮助别人。
以下是我用于测试的内容:
<?php
$a = "-abcdefghij";
$apos="'";
echo "<script type=\"text/javascript\">";
echo "var s = [];";
for($i=1;$i<=10;$i++) {
echo "s[".$i."] = ".$apos.$a[$i].$apos.";\n";
}
echo "alert('s[1]='+s[1]);";
echo "</script>";
?>