【问题标题】:Getting PHP data from MySQL DB inside script tag for use with Javascript从脚本标签内的 MySQL DB 获取 PHP 数据以用于 Javascript
【发布时间】:2014-09-04 18:15:14
【问题描述】:

这类似于PHP generated content inside Javascript breaking script,但是我无法理解我错在哪里。

这是简报。我正在尝试将 MySQL DB 中的 10 个字符串输出到 javascript 数组 s,(s[1] 到 s[10])(存储在 pt1 到 pt1 列下的一个 MySQL 表中 - 信息,因此代码对所有人来说都是可以理解的)。 (注意 $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>";
 ?>

当我在浏览器中通过“查看源代码”查看源代码时,它会生成正确的代码:

<script>
var s = [];
s[1] = 'a';
s[2] = 'b';
.
.
s[10] = 'j';
</script>

但是,这不能作为脚本工作(这意味着如果我检查 Google 开发人员工具,然后单击“脚本”标签元素内的内容,它会被告知是“文本”,而不是“脚本”在下面的栏中)。

但是,如果我删除 PHP,并以相同的方式手动编写整个脚本,它就可以正常工作。我已经尝试删除 PHP 代码中的 \n 换行符,但仍然是同样的问题。

PHP 中的某些东西破坏了脚本。你能帮忙吗?

【问题讨论】:

  • “不能作为脚本工作”是什么意思?
  • 我的个人偏好是var s=&lt;?php echo json_encode($info);?&gt;;
  • @jeff 我现在已经在问题中澄清了这一点。如果还不清楚,请告诉我。
  • 当您说“查看源文件”时,您的意思是在浏览器中使用“查看源文件”吗?
  • @Bob 是的。这个问题在精神上与我在问题开头发布的早期问题链接非常相​​似。

标签: javascript php


【解决方案1】:

我最好的猜测是您的一个(或多个)字符串包含一个字符(例如撇号),它会破坏 PHP 输出。 Passery 已经在您的 cmets 部分提出了最佳解决方案:

echo '<script>';
echo 'var s = ' . json_encode($info);
echo '</script>';

【讨论】:

  • 我同意路人的回答,并且有效。但是撇号是否破坏了它我不确定,因为工作代码和非工作代码的“查看源”文件完全相同!
【解决方案2】:

我认为您可能误读了开发人员工具。当我仔细查看 Chrome 时,它​​确实将您的脚本识别为文本,可能是因为默认类型是 text/javascript。在 &lt;script&gt; 标记上放置显式类型声明没有任何改变。

但是,当我在 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>";
?>

【讨论】:

    猜你喜欢
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-26
    相关资源
    最近更新 更多