使用jQuery的'load()'加载带有内部PHP include函数的外部PHP文件

时间:2013-04-02 16:12:32

标签: php jquery jquery-load

我正在开发一个网站,其中包含“新闻”部分和“旧版新闻”部分。新闻被单独存储在外部PHP文件中,这些文件由服务器通过PHP加载(服务器计算PHP文件的数量并显示最后一个 - 当前新闻 - 在“新闻”部分和所有其他部分在“旧闻新闻”部分:

<!-- ####### NEWS ####### -->

<div id="news">
    <h2>NEWS</h2>

    <div>
        <a id="showoldnews" href="#news">OLDER</a>
    </div>

    <?php $directory = "assets/news/"; if (glob($directory . "*.php") != false) { $newscount = count(glob($directory . "*.php")); } else {} ?>

    <?php include('assets/news/news' . $newscount . '.php'); ?>

    <!-- ####### OLDER NEWS ####### -->

    <div id="oldnews">
        <h2>OLDER NEWS</h2>

        <?php
            $newscount = $newscount-1;
            while ($newscount>0) {
                include('assets/news/news' . $newscount .'.php');
                --$newscount;
            }
        ?>
    </div>

“旧版新闻”部分最初是隐藏的,只有jQuery触发器才能显示:

// Show old NEWS
$('a#showoldnews').click(function () {
    $('#oldnews').show(400);
});

但我期待长期存在的问题:因为所有新闻都是首先加载的,这意味着随着越来越多的新闻出现,网站的加载速度会变慢。即使它是“可接受的”,它仍然不是理想的解决方案。

我正在考虑使用jQuery.load()来加载外部PHP文件,然后只有在用户要求时才加载旧的新闻。

问题是我不知道在用户点击链接后使用jQuery.load()是否可以加载以下脚本:

<?php
    $directory = "assets/news/";
    if (glob($directory . "*.php") != false) {
        $newscount = count(glob($directory . "*.php"));
    }
    else {
    }
?>
<?php
    include('assets/news/news' . $newscount . '.php');
?>

这种方法可以接受吗?我试过了,但它根本不起作用(我可以使用load()函数加载静态内容,但是我无法使服务器处理PHP脚本。我不知道是否可以使服务器处理PHP代码,因为PHP处理是在网站开始加载之前在服务器端完成的......事实并非如此。

更新#1

我有以下内容从服务器加载'load.php'文件:

<script type="text/javascript">
    $('#oldnews').load('load.php');
</script>

load.php文件的内容是:

<div class="section" id="oldnews">
    <h2>OLDER NEWS</h2>

    <div class="topLink">
        <a href="#">TOP</a>
    </div>

    <div class="topLink2">
        <a id="hideoldnews" href="#news">HIDE</a>
    </div>

    <?php
        $newscount = $newscount-1;
        while ($newscount>0) {
            include('assets/news/news' . $newscount .'.php');
            --$newscount;
        }
    ?>
</div>

“TOP”和“HIDE”链接没有任何问题。但是,PHP块似乎根本没有被处理......

2 个答案:

答案 0 :(得分:2)

PHP 可以 在jQuery抓取内容之前运行......以下是我设置和测试的内容......

的test.html

<!DOCTYPE HTML>
<html>
    <head>
        <script type="text/JavaScript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
    </head>

    <body>
        <div id="feeds"><b>45</b> feeds found.</div>
        <script type="text/JavaScript">
            $("#feeds").load("go.php");
        </script>
    </body>
</html>

go.php

<?php
    echo 'Hi';
?>

结果是#feeds .innerHTML是“嗨”......我希望能够在复制情况时获得更多信息/代码。查看the jQuery load API documentation可能会有所帮助。

答案 1 :(得分:0)

正如@joseph告诉它的正确并帮助了我,但在我的情况下我想隐藏外部Php文件的内容,
以下是我的代码更改,这对我有帮助!

<!DOCTYPE HTML>
<html>
    <head>
        <script type="text/JavaScript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
    </head>

    <body>
    <b>Db file result</b>
        <div id="feeds" hidden=""></div>
        <script type="text/JavaScript">
            $("#feeds").load("db.php");
        </script>
    </body>
</html>

我的Php文件有数据库连接所以我不得不隐藏它, db.php中

<?php

session_start();

$db = pg_connect("host=ec2-xxx-x0-xxx-xx.compute-1.amazonaws.com port=5432 dbname=dxxxxxxxxx user=vxxxxxxxxxx password=1xxxxxxxxxxxxxxxxxxxxxxxxxxxxd");
 pg_select($db, 'post_log', $_POST);


 $query=pg_query("(SELECT id,name, FROM organization WHERE is_active = 'true' AND account_token = '".$_SESSION['account_token']."');


 $json=array();
while ($student = pg_fetch_array($query)) {
    $json[$student["is_user"]."-".$student["id"]] = $student["name"]."-".$student['pan'];
}

$textval = json_encode($json);
$foo = "var peoplenames=" . $textval;

file_put_contents('autocomplete-Files/'.$_SESSION['account_token'].'.js', $foo);

echo "<script>location='filename.php'</script>";


?>