0

我有这个小功能

function makewindows(){
child1 = window.open ("about:blank");
child1.document.write("<?php echo htmlspecialchars(json_encode($row2['ARTICLE_DESC']), ENT_QUOTES); ?>");
child1.document.close(); 
}

无论我尝试什么,都只是将 php 代码输出为 html 源代码,而不是 php 代码的结果。这以前工作正常,我不确定我做了什么改变导致了这种行为。

我现在已经粘贴了所有代码。调用 updateByQuery 的链接会生成错误,从而阻止正确解析 makewindows..我认为。但是,我不确定 updateByQuery 有什么问题:

function updateByQuery(layer, query) {
   url = "get_records.php?cmd=GetRecordSet&query="+query+"&sid="+Math.random();
   update(layer, url);
}
4

5 回答 5

3

您最近是否将此文件从 PHP 解析文件(即 .phtml/.php)移出到 .js 文件中?请注意,您希望执行的任何 PHP 在交付给客户端之前必须由 PHP 解析器解析。如果它最初位于 .php 文件中,那么它将被解析/执行,并且工作正常。

但是,默认情况下,PHP 不解析 .js 文件。也许他们曾经是,但您的服务器管理员最近升级了一些东西,并且失去了这种行为?您可以使用本地配置文件(在 Apache 中为 .htaccess)重新启用它。

于 2008-12-15T12:26:15.673 回答
1

在发送到浏览器之前,此代码必须位于由 PHP 解析的文件中。确保它具有“.php”扩展名(或者 Apache/(或其他)配置为通过 PHP 放置它使用的任何扩展名)。此外,请确保 PHP 安装正确且正常工作。

于 2008-12-15T12:24:33.430 回答
0

确保您从网络服务器运行页面,如下所示:http://localhost/yourpage.php而不是直接从文件本身运行,如下所示:file://yourpage.php

于 2008-12-15T12:28:50.440 回答
0

我假设您仍然将它保存在由 PHP 解析的文件中,就像其他人已经说过的那样。那么可能是这个代码片段上面的东西混淆了 php-parser,因此它无法识别 php-tag。

为了测试这一点,试着在这个函数之前输出一些其他的东西,也许只是一个评论之类的。

此外,在 client1 之前使用“var”,否则 client1 将在全局范围内。

更新 1 由于您尝试插入一段 php 代码并且它损坏了,那么问题是服务器没有按应有的方式解析文件。

要测试服务器是否真的解析了您的 .js 文件(我相信它不是默认设置),请创建一个新文件:test.js

<?php echo "This is a test"; ?>

在浏览器中打开test.js文件并查看页面源代码。如果它具有 php 标签,则您的服务器不会解析 .js 文件。

更新 2 如果 php 在 .js 文件中工作,请尝试像这样重写函数(抱歉,我没有测试它,因为我现在无权访问 php-server)

<?php    
echo "function makewindows(){var child1 = window.open (\"about:blank\"); " .
"child1.document.write(\"" . htmlspecialchars(json_encode($row2['ARTICLE_DESC']), ENT_QUOTES) . "\");" . "child1.document.close(); }";    
?>
于 2008-12-15T12:34:24.347 回答
0

我不确定这是否会有所帮助,但最佳实践规定,每当您使用 JavaScript 写入新窗口时,都应该打开和关闭文档。你能试试这个吗?

function makewindows(){
  var child1 = window.open ("about:blank");
  child1.document.open();
  child1.document.write("<?php echo htmlspecialchars(json_encode($row2['ARTICLE_DESC']), ENT_QUOTES); ?>");
  child1.document.close(); 
}
于 2008-12-15T13:35:59.900 回答