将页面加载到div中的PHP,JavaScript无法工作。

3

我将使用Ajax将页面加载到一个div中。

页面已经成功地加载了,但我无法运行其中的PHP和JavaScript代码。

在服务器端,我是这样加载页面的:

file_get_contents('../' . $PAGE_URL);

在浏览器中,我正在使用 <div> 设置内容。
eval("var r = " + response.responseText);

将获取的信息设置为该div的innerHTML,但是当我获取新的内部页面时,没有PHP或JavaScript可用。

这是否应该是这样的?


当我尝试包含我的页面时,php会给我一个错误:[Thu Aug 05 15:38:01 2010] [error] [client 10.0.0.2] <br/><br/>未预期的输出:\r\n<html>\r\n\r\n\r\n\r\n<script language="javascript" type="text/javascript" src - shay
为什么不编辑你的问题并添加你尝试过的代码和错误信息呢? - qw3n
3个回答

2

我认为您的PHP代码不会起作用,因为您处理它的方式只是将其作为文本。建议使用类似于include('../' . $PAGE_URL);这样的代码来解析PHP。 JavaScript问题可能与您在div中加载<html> <body> <head>标签有关,我不确定这样做会发生什么,但它应该无法正常工作。尝试使用某种类型的<frame>标签。


我移除了所有的HTML和BODY标签,并添加了一个框架来包围它们。 在我的服务器上,我将'include'方法放在'file_get_contents'之前。 但现在我根本看不到页面。 - shay
不要使用file_get_contents,只需使用include。但是为什么不使用frameiframe呢?使用JavaScript添加元素,然后将其源设置为所需的文件。除非有某种原因需要从服务器调用页面,否则这样做应该没问题。 - qw3n
我有包含文件的问题。 [Thu Aug 05 15:21:24 2010] [error] [client 10.0.0.2] <br/><br/>未预期的输出:\r\n\r\n\r\n<script language="javascript" type="text/javascript" src="js/..... - shay

1
为了使您的JavaScript代码正常执行,您必须等待浏览器完成页面加载。
此事件名为 onload()。您的代码应在此事件上执行。

0
<?php
    $file = false;

    if(isset($_GET['load'] && is_string($_GET['load'])) {
        $tmp = stripclashes($_GET['load']);
        $tmp = str_replace(".","",$tmp);

        $file = $tmp . '.php';
    }

    if($file != false && file_exists($file) && is_readable($file)) {
        require_once $file;
    }

?>

通过 file.php?load=test 调用

这个过程处理 PHP 文件,只要从文件中输出 HTML 就可以了

target = document.getElementById('page');    
target.innerHTML = response.responseText;

现在,我相当确定其中的某些部分是不安全的,您可以拥有一个允许的要求白名单。最好还应该在特定目录中查找文件。就安全性而言,我对直接将responseText转储回DIV也不是很确定,因为它容易受到XSS攻击。但是今天已经结束了,我还没有查阅任何相关信息。请注意,如果没有对此进行任何检查,您可能会导致用户使用file_get_contents被引导到第三方网站,这将是非常糟糕的事情。您可以在PHP中评估file_get_contents请求,这...好吧,非常非常糟糕。例如尝试

<?php
     echo file_get_contents("http://www.google.com");
?>

但我担心我必须在这里问一下,你为什么要这样做?这似乎是一种非常绕弯的方式来实现超链接。

这是为了 AJAX 而 AJAX 吗?


我在左侧有一个菜单,而不是加载包含菜单的完整HTML,我只请求替换内容div,使用ajax,我能够像这样做:function getPageContent(&$response){ $PAGE_URL = $_POST['PAGE_URL']; ob_start(); require_once( '../' . $PAGE_URL ); $contents = ob_get_contents(); ob_end_clean(); $response->fields->frame_main = $contents;}但我必须将我的JavaScript分离到主页面中,有没有办法避免这种情况? - shay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接