在PHP foreach的脚本中回显JSON.parse时如何避免语法错误?

问题描述 投票:0回答:1

这是我关于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 json foreach syntax-error echo
1个回答
0
投票

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”;它可以是您想要的任何字符串。

© www.soinside.com 2019 - 2024. All rights reserved.