这是我在 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>';
}
?>
最佳答案
PHP 有 Heredoc 和 Nowdoc 字符串,它们是在 PHP 中处理多行字符串的最佳方式。
http://php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc
您可以通过使用这种类型的字符串来解决您的问题,如下所示:
<?php echo <<<EOD
<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]);
};
}
};
printValues(obj);
</script>
EOD;
?>
请注意,结束标记 EOD 根本不能缩进,否则 PHP 不会承认它。此外,您不必使用“EOD”;它可以是你想要的任何字符串。
关于php - 在 PHP foreach 的脚本中回显 JSON.parse 时,如何避免语法错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60368582/