0

我目前有一个基本站点,我正在通过 ajax 将内容加载到该站点中。问题是这段代码不是“实时”的,需要我在加载的页面中重新包含 php 包含,以便访问其中包含的查询。

我知道您可以在涉及某些事件时使用“on”方法来解决此问题,以便动态加载的代码从一开始就可以正常工作,但是当页面刚刚加载时您将如何处理呢?必须在每个加载的页面上重新包含我的 php 包含似乎是多余和草率的。

这是一些代码:

<?php
    session_start();
    require_once('dbconnect.php');
    require_once('functions.php');
?>

<!DOCTYPE html>
<html>
    <head>
        <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
        <script type="text/javascript" src="x.js"></script>
    </head>
    <body>
        <div id="container">
            <div id="content">

            </div>
        </div>
    </body>
</html>

JS:

$(document).ready(function() {
    $('#content').load('x.php', function() {
        alert("loaded");
    });
});

加载页面:

<?php
    //LOAD ALL WORK
    $query = mysql_query("SELECT * FROM work");
    if (mysql_num_rows($query) > 0) {
        while ($work = mysql_fetch_array($query)) {
?>

<div class="still_cell">
    <img class="still_image" src="<?php 
        print $work['image_path'];
    ?>" />

    <div class="still_info">
        Info
    </div>
</div>

<?php   
        }
    }
?>

导致各种 php 错误,表示查询没有产生任何结果,除非我包含连接到嵌套在加载文件中的数据库的代码

4

2 回答 2

2

你需要把

require_once('dbconnect.php');
require_once('functions.php');

在您尝试进入#content 的页面中。

无论您在哪里调用该页面,您调用的页面都是一个单独的页面,因此如果没有任何引用,它就没有与数据库的连接。

php 是 CGI,因此所有 php 代码在将页面发送到浏览器之前在服务器上执行,因此您需要提供对连接文件以及所有其他文件的引用,以使数据库连接在其他页面中工作。

于 2013-05-06T03:03:57.053 回答
1

PHP 不知道客户端做了什么。
当浏览器进行 AJAX 调用时,这将显示为对 Web 服务器的独立请求。
关键是,PHP 是为每个传入请求独立执行的。

有多种方法可以在对 PHP 的多个请求之间持久化数据,例如:

  • APC(PHP 扩展):最初是已编译 PHP 脚本的缓存 - 还可以将用户数据存储在内存中,这些数据在请求之间持续存在。
  • 文件:序列化变量并将它们存储在文件中。

但是,当涉及到资源(MySQL 连接、文件句柄等)之类的东西时,尝试持久化它们被认为是不安全的。例如,APC 和序列化将拒绝使用资源类型。

结论:引导(连接到数据库、声明类、函数等)通常针对每个请求完成。

于 2013-05-06T02:57:38.913 回答