我遇到了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实例?
答案 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是一种很好的方式,你在思考过程中做得很好..继续......