Javascript 和 PHP 的交互
我们从小就知道Javascript在客户端(即浏览器)上运行,PHP是服务器端工具(即服务器端)。显然,两者只是不能互动。
但是,好消息;它可以工作,这是如何。
目标是将一些动态信息(例如服务器配置项目)从服务器获取到Javascript环境中,以便在需要时可以使用它 - 通常这意味着对演示文稿进行DHTML修改。
首先,为了澄清DHTML的用法,我将引用这个DHTML示例:
<script type="text/javascript">
function updateContent() {
var frameObj = document.getElementById("frameContent");
var y = (frameObj.contentWindow || frameObj.contentDocument);
if (y.document) y = y.document;
y.body.style.backgroundColor="red"; // demonstration of failure to alter the display
// create a default, simplistic alteration usinga fixed string.
var textMsg = 'Say good night Gracy';
y.write(textMsg);
y.body.style.backgroundColor="#00ee00"; // visual confirmation that the updateContent() was effective
}
</script>
假设我们在某个地方有一个ID=“frameContent”的html文件,那么我们可以用一个简单的< body onload=“updateContent()”>
咕噜咕噜;我们现在不需要PHP来做到这一点,我们做吧!但这为应用PHP提供的内容创建了一个结构。
我们将有问题的网页更改为PHTML类型,以允许服务器端PHP访问内容:
**foo.html becomes foo.phtml**
然后我们添加到该页面的顶部。我们还将 php 数据加载到全局变量中以供以后访问 - 如下所示:
<?php
global $msg1, $msg2, $textMsgPHP;
function getContent($filename) {
if ($theData = file_get_contents($filename, FALSE)) {
return "$theData";
} else {
echo "FAILED!";
}
}
function returnContent($filename) {
if ( $theData = getContent($filename) ) {
// this works ONLY if $theData is one linear line (ie remove all \n)
$textPHP = trim(preg_replace('/\r\n|\r|\n/', '', $theData));
return "$textPHP";
} else {
echo '<span class="ERR">Error opening source file :(\n</span>'; # $filename!\n";
}
}
// preload the dynamic contents now for use later in the javascript (somewhere)
$msg1 = returnContent('dummy_frame_data.txt');
$msg2 = returnContent('dummy_frame_data_0.txt');
$textMsgPHP = returnContent('dummy_frame_data_1.txt');
?>
现在,我们的 javascript 可以像这样访问 PHP 全局变量:
通过 accessig the globals var textMsg = '< ?php 全局$textMsgPHP;回声“$textMsgPHP”; ?>';
在 javascript 中,替换
var textMsg = 'Say Good night Gracy';
with: // 使用 php returnContent()
var textMsg = '< ?php $msgX = returnContent('dummy_div_data_3.txt');回声“$msgX”?>';
总结:
- 要修改的网页必须是phtml或某些php文件
- 该文件中的第一件事必须是<?php 获取动态数据 ?>
- php数据必须包含自己的css样式(如果内容在框架中)
- 使用动态数据的javascript必须位于同一文件中
- 并且我们根据需要插入/退出PHP以访问动态数据
- 注意:- 在外部javascript中使用单引号,在动态php数据中仅使用双引号
要解决的问题:使用文件名调用 updateContent() 并通过 onClick() 而不是 onLoad() 使用它
可以在Sample_Dynamic_Frame.zip中提供一个示例供您检查,但没有找到附加它的方法