从脚本标记内的MySQL DB获取PHP数据,以便与Javascript一起使用

时间:2014-09-04 09:07:02

标签: javascript php

这类似于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中的某些内容破坏了脚本。你能帮忙吗?

2 个答案:

答案 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>";
?>