使用ajax加载页面时的PHP范围问题

时间:2014-01-01 04:30:10

标签: php jquery ajax

我遇到了PHP问题。我有一个index这样的文件:

<?php session_start(); ?>
<!doctype html>
<html lang="en">
<head>
...
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
</head>
<body>
<?php
include $_SERVER['DOCUMENT_ROOT'] . '/config.php';
function __autoload($class_name) {
    include $_SERVER['DOCUMENT_ROOT'] . '/classes/' . $class_name . '.php';
}
    include '../shared/navigation-bar.php';
    $user = new Users($db);
    print_r($user);
    //this prints fyi - so all is well here
?>
    <div class="fill grey-bg">
        <?php include(dirname(__FILE__) . '/sidebar.php');?>
        <div id="content" class="col-md-10 white-bg">
        </div>
    </div>
  <script src="../shared/js/bootstrap.js"></script>
  <script src="./js/app.js"></script>
</body>
</html>

一切都很好。现在我有一个侧边栏,这样做:

<table class="table">
<tr>
    <td>
        <a href="#" id="manageUsers">Manage Users</a>
    </td>
</tr>
</table>

单击时使用ajax调用加载新页面:

$("#manageUsers").click(function(){
    $("#content").load('pages/manageUsers.php');
});

好的,这样就会加载新页面 - manageUsers.php

<h3>List Users</h3>
<?php  print_r( $user ) ;?>

现在,您可能猜到的问题是$user不会在加载的页面中打印出来。我猜它是一个范围问题。我在第一次加载索引页面时定义它,然后当我通过单击加载文档时,它无法将原始$user变量传递到新页面,因为PHP是服务器端并且已经加载了? / p>

问题是,解决这个问题的方法是什么 - 我正在尝试以OOP方式编写代码,因此加载类并在索引上创建对象以便在其他页面中使用。

问题是如果我不能这样做,那么我必须重新包含这些类并在每个加载的页面上创建一个新对象。这看起来非常低效。有没有办法解决这个问题?

如果我必须使用ajax,有没有一种聪明的方法通过ajax来做到这一点?或者我应该放弃OOP计划并编写一个函数列表,包括它和每个加载页面中的新pdo实例?

1 个答案:

答案 0 :(得分:1)

执行页面后无法访问php变量。因此,您需要将数据存储在javascript中,并使用GET / POST将其发送到您要使用它们的页面。

在“print_r($ user);”

之后添加以下代码
<script>
 var users_list = <?php echo json_encode($user); ?>;
</script>

更改您的javascript代码,如下所示

$(document).on('click', '#manageUsers', function(){
 $("#content").load('pages/manageUsers.php', {"users": users_list});
 return false;
});

将manageUsers.php代码更改为

<h3>List Users</h3>
<?php print_r($_POST['users']); ?>

如果您不知道使用JSON .. JSON是一种交换/维护/访问数据的简单方法......

$users = array();
$users[1] = array('name' => 'mr.mad', 'age' => '22');
$users[2] = array('name' => 'miss.mad', 'age' => '22');
echo json_encode($users);

以上代码将回显

{
 "1": {
  "name": "mr.mad",
  "age": "22"
 }, 
 "2": {
  "name": "miss.mad",
  "age": "22"
 }
}

确保您的用户数组甚至是上面的结构化数组

不要直接使用'click'事件..当您考虑使用ajax应用程序时,请使用“$(document).on('click')”。有了这个,您甚至可以在新添加的dom对象上使用此处理程序..

AJAX是一种很好的方式,你在思考过程中做得很好..继续......