PHP 变量包含 HTML 和 JavaScript.通过JavaScript将其注入HTML不起作用


PHP variable contains HTML and JavaScript. Injecting it into HTML through JavaScript not working

我正在尝试将一些自定义PHP代码添加到Wordpress自定义帖子类型中。

在一个单独的 php 文件中,我有这个:

<?php

$BuildForm = '<script src="//app.marketo.com/js/forms2/js/forms2.min.js"></script>
            <form id="mktoForm_1111"></form>
            <script>MktoForms2.loadForm("//app.marketo.com", "345-XCL-354", 1111,
                function(form) {
                    for ( var ss = document.styleSheets, i = 0, imax = ss.length; i < imax; i++ ) {
                        if ( ( ss[i].href && ss[i].href.indexOf("marketo.com") !== -1 )
                        || ( (ss[i].ownerNode || ss[i].owningElement).parentNode == form.getFormElem()[0] ) ) {
                        }
                    }
                    form.onSuccess(function(values, followUpUrl){
                    location.href = "#";
                    return false;
                    });
                    form.vals({ "comments":"test"});
                });
            </script>';

?>

然后在 Wordpress 中的自定义帖子类型中,我有这个:

<div id="TheForm" style="max-width:40%; margin: 0 auto;"></div>
<script type="text/javascript">
 document.getElementById("TheForm").innerHTML = '<?php echo $BuildForm; ?>' ;
</script>

我遇到的问题是 #TheForm 的内容显示为';

我不太确定问题是什么。我需要以不同的方式格式化 PHP 变量中的 JavaScript 吗?

例如,我尝试逃离"/,但这也没有帮助。

(在你问之前,是的,我在我的 Wordpress 自定义帖子类型中包含外部 php 文件)。

当然不行!PHP 在服务器上执行(不输出任何内容),然后由客户端渲染,然后你的 javascript 运行。你的客户端JavaScript不知道如何处理PHP。

你的PHP应该返回完全格式的HTML,如下所示:

<?
$BuildForm = '....';
?>
<div id="TheForm" style="max-width:40%; margin: 0 auto;">
  <?= $BuildForm ?>
</div>

或者,更改客户端 javascript 以通过 ajax 获取$BuildForm HTML。但是让你的PHP生成你想要的HTML可能更容易。

由于您的$BuildForm变量包含 </script> ,因此会有一个SyntaxError: Unexpected EOF。下面分配的代码示例:

<script type="text/javascript">
 <script src="//app.marketo.com/js/forms2/js/forms2.min.js"></script> <!-- </script> tag will be closed here -->
</script>

<script type="text/javascript">将在... forms2.min.js"></script>关闭,关闭时间太早。

因此,最好的替代方法是将表单直接echodiv中。

<div id="TheForm" style="max-width:40%; margin: 0 auto;"><?php echo $BuildForm; ?></div>