我有一个PHP函数,可以查询MySQL数据库并输出一个html表。这适用于以下PHP代码:
<?php
showTable();
?>
但如果我使用javascript代码:
form.onsubmit = function() {
document.getElementById("php_code").innerHTML="<?PHP showTable(); ?>";
};
浏览器不显示该表。 (innerHTML)html字符串似乎有问题。我注意到,例如,MySQL参数中的回车导致innerHTML出现问题,但不会出现仅使用PHP的代码。
有没有办法解决这个问题?
(我希望使用javascript位的原因是能够使用具有不同PHP函数的两个按钮的表单,具体取决于单击的表单按钮)。
答案 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检索。
祝你好运。