PHP函数HTML输出显示在浏览器中,但不显示在Javascript innerHTML中

时间:2011-02-21 16:02:00

标签: javascript html

我有一个PHP函数,可以查询MySQL数据库并输出一个html表。这适用于以下PHP代码:

<?php
showTable();
?>

但如果我使用javascript代码:

form.onsubmit = function() {
    document.getElementById("php_code").innerHTML="<?PHP showTable(); ?>";
};

浏览器不显示该表。 (innerHTML)html字符串似乎有问题。我注意到,例如,MySQL参数中的回车导致innerHTML出现问题,但不会出现仅使用PHP的代码。

有没有办法解决这个问题?

(我希望使用javascript位的原因是能够使用具有不同PHP函数的两个按钮的表单,具体取决于单击的表单按钮)。

3 个答案:

答案 0 :(得分:3)

Php在服务器上运行,它会生成html页面,并将其返回给浏览器进行渲染。 Javascript在浏览器中运行 - 在完成运行后发生。无法直接从javascript函数中调用php函数。

为了做你想做的事情,你需要将你的php代码移动到它自己的PHP文件中,并使用jQuery's load() function之类的东西来通过单独的http请求来调用你的php。像这样:

form.onsubmit = function() {
    jQuery("#php_code").load('show_table.php');
};

其中“show_table.php”包含这样的内容:

<?php 
    /** remember to include the function showTable()
     * here, so you can call it below.
     */
    function showTable() {
      /* your function source here */
    }

    showTable(); 

希望这会有所帮助。您可能还希望对Web应用程序进行一些研究 - 特别是,阅读分别由PHP和Javascript播放的角色


修改

如果您理解我上面列出的区别,并且您的实际意图确实让PHP函数在页面初始加载时运行,而不是等待直到调用javascript函数,然后您可以按如下方式修改代码:

form.onsubmit = function() {
    document.getElementById("php_code").innerHTML="<?PHP echo(addcslashes(showTable(), "\0..\37\\'\"/\177..\377")); ?>";
};

为了使用这种方法,您还需要使函数showTable() 返回字符串,而不是直接打印出来。实现此目的的一种方法是php's output buffering functions。只需使用现有的showTable()函数,并将其包装成:

function showTable() {
   ob_start();

   /* existing showTable logic goes here */

   return ob_get_clean();
}

答案 1 :(得分:2)

两件事:

  • 请确保showTable()中没有任何会干扰JavaScript代码的字符(如引号)
  • nl2br()函数中将新行转换为中断字符(showTable())。

答案 2 :(得分:2)

如果你想在这样的变量中执行它,你需要正确地转义showTable()的输出。

但是,我为您提出了一种不同的方法。像这样包含HTML:

<script type="text/html" id="showTable">
    <?php showTable(); ?>
</script>

<script type="text/javascript">
form.onsubmit = function() {
    document.getElementById("php_code").innerHTML= document.getElementById('showTable').innerHTML;
};
</script>

请注意在前一个脚本标记中使用type =“text / html”。这将导致表格不显示在浏览器中,但可以通过javascript检索。

祝你好运。