【发布时间】:2020-02-24 01:44:08
【问题描述】:
这是我在 StackOverflow 上的第一个问题,我认为自己是新手(自学成才)。请多多包涵。
以下脚本在未包含在 php 标签中时可在页面上运行。
<script>
var json = '{"submitted_values":{"15":{"15.1":"123"}}}';
var obj = JSON.parse(json);
function printValues(obj) {
for (var k in obj) {
if (obj[k] instanceof Object) {
printValues(obj[k]);
} else {
document.write(obj[k]);
};
}
};
document.write(obj["submitted_values"]["15"]["15.1"]);
</script>
当包裹在 php 标签中并被回显时,相同的脚本在页面上不起作用。
它实际上使网站崩溃。
下一个代码块中的第二行var json = '{"submitted_values":{"15":{"15.1":"123"}}}'; 得到syntax error, unexpected ':'。
<?php echo '<script>
var json = '{"submitted_values":{"15":{"15.1":"123"}}}';
var obj = JSON.parse(json);
function printValues(obj) {
for (var k in obj) {
if (obj[k] instanceof Object) {
printValues(obj[k]);
} else {
document.write(obj[k]);
};
}
};
document.write(obj["submitted_values"]["15"]["15.1"]);
</script>'; ?>
下面描述了我想要工作的内容。
测试是一行三列。
下一个代码块中的第 1 列是上面的脚本,当然,它不起作用。
Col 2 工作并产生一个字符串,其中脚本中的document.write(obj["submitted_values"]["15"]["15.1"]); 工作。我已经测试了一个实际的(精心制作的、嵌套的)字符串,它确实有效,但只有在 php 标签之外时才有效。
Col 3 是上面的脚本,但 '{"submitted_values":{"15":{"15.1":"123"}}}' 替换为 ' . esc_html($incomplete_submission->submission) . '。
Col 3 是我最终想要在 WordPress 插件中工作的内容。
如果可以的话,请有人从echo '<!-- Col 3 --><td><script> 复制以下代码块,更改代码以使其正常工作,然后将其全部粘贴到答案中吗?
我要求粘贴整个内容,因为它可能会为您节省额外的来回时间。
谢谢!
<?php
foreach ($incomplete_submissions as $incomplete_submission)
{
echo '<!-- Row --><tr>';
echo '<!-- Col 1 --><td><script>
var json = '{"submitted_values":{"15":{"15.1":"123"}}}';
var obj = JSON.parse(json);
function printValues(obj) {
for (var k in obj) {
if (obj[k] instanceof Object) {
printValues(obj[k]);
} else {
document.write(obj[k]);
};
}
};
document.write(obj["submitted_values"]["15"]["15.1"]);
</script></td>';
echo '<!-- Col 2 --><td>' . esc_html($incomplete_submission->submission) . '</td>';
echo '<!-- Col 3 --><td><script>
var json = ' . esc_html($incomplete_submission->submission) . ';
var obj = JSON.parse(json);
function printValues(obj) {
for (var k in obj) {
if (obj[k] instanceof Object) {
printValues(obj[k]);
} else {
document.write(obj[k]);
};
}
};
document.write(obj["submitted_values"]["15"]["15.1"]);
</script></td>';
echo '</tr>';
}
?>
【问题讨论】:
-
你有一个未转义的引用
'那里。解决这个问题 -
不要使用 echo 一开始就输出大块的静态 HTML / JS 代码。使用php.net/manual/en/language.basic-syntax.phpmode.php下显示的语法,只使用小的PP代码段来输出实际动态的部分。
-
“它实际上使网站崩溃了。” - 什么意思 - “空白页面”?然后你应该首先通过 PHP 配置启用正确的 PHP 错误报告,以便 PHP 有机会告诉你语法错误。
标签: php json foreach syntax-error echo