这是我关于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]);
};
}
};
document.write(obj["submitted_values"]["15"]["15.1"]);
</script>
EOD; ?>
请注意,最终令牌EOD绝对不能缩进,否则PHP将不会确认它。另外,您不必使用“ EOD”;它可以是您想要的任何字符串。