所以我有一个有趣的问题
我遇到了jquery .load()函数的问题。我有一个文件结构如下
index.php
|
|---header.html
|---body.html
|---footer.html
index.php将三个变量设置为$variable_one = new Database('passedQuery');
header.html,body.html和footer.html包含在index.php
中在body.html中,我有类似于
的内容<div class="span4 well">
<h3>Current Statistics</h3>
<hr>
<table class="table table-striped">
<thead>
<tr>
<th>Users</th>
<th>Event One</th>
<th>Event Two</th>
<th>Event Three</th>
</tr>
</thead>
<tbody>
<tr>
<td><?php echo $var1->result[0][0]; ?></td>
<td><?php echo $var2->result[0][0]; ?></td>
<td><?php echo $var3->result[0][0]; ?></td>
</tr>
</tbody>
</table>
</div>
我还在body.html中有一个表单,它通过通用的jquery函数提交,如此
$(document).ready(function(){
$('.btn').bind('click', function(e){
e.preventDefault();
var form = $(this).parents('form');
var vals = $(form).serialize();
var form_id = $(form).attr('id');
$.ajax({
url: $(form).attr('action'),
type: $(form).attr('method'),
data: vals,
dataType: 'json',
success: function(data){
console.log("Success");
$('#information').html('<div class="alert alert-success">Great Success! :)</div>');
setTimeout(function() {
$('#content').load('views/partials/body.html');
}, 5000);
},
error: function(a, b, c){
console.log("Error");
$('#information').html('<div class="alert alert-error">Epic Failure</div>');
setTimeout(function() {
$('#content').load('views/partials/body.html');
}, 5000);
}
});
});
});
当我提交表单并重新加载正文时,html中回显的PHP变量现在消失了,我得到类似于以下的apache错误
[dateTime] [error] [client IP] PHP Notice: Undefined variable: variable in /path/to/body.html on line 133, referer: myReferrer
我向我的一些朋友询问了这件事,他们都被困了,就像Freenode的#jquery一样。有人有什么想法吗?
更新 - 表格代码和index.php代码 表格
<div class="span4 well">
<form class="form-horizontal" id="admin_add" name="admin_add" method="post" action="routes/to/add_admin.php">
<fieldset>
<legend>Add Administrator</legend>
<div class="control-group">
<label class="control-label" for="select03">Select a user</label>
<div class="controls">
<select id="select03" name="user">
<?php
foreach($var1->result as $key => $value)
echo "<option>".$value[0]."</option>";
?>
</select>
</div>
</div>
<div class="form-actions">
<button type="submit" class="btn btn-primary form-submit-button">Submit</button>
</div>
</fieldset>
</form>
</div>
索引
$var2 = new Database('query', 'SELECT COUNT(uid) FROM attendees WHERE eid = 1');
$var3 = new Database('query', 'SELECT COUNT(uid) FROM attendees WHERE eid = 2');
/**
* List users to add to database
*/
$var1 = new Database('query', 'SELECT name FROM users WHERE admin=0');
/**
* Include all the visuals
*/
include('views/partials/header.html');
require_once('views/partials/body.html');
include('views/partials/footer.html');
答案 0 :(得分:3)
当你第一次加载body.html时,我猜你正在使用php的include()
函数加载它。嗯,这样做是“连接”php所以在服务器端它就像它的一个长php文件。这适用于您的变量,因为它好像代码中没有中断。
当你使用jQuery的load()
函数时,这会发生在客户端。发生的事情是你获得了JUST body.html
的html输出,你动态地(在客户端)将这些内容放入客户端页面。
您遇到的问题是PHP不再连接在一起。 load()
将body.html
置于其奇点中并将其放入页面中。
另一种看待它的方法是,当有人去index.php
解析php时,所有回显的变量都会变成bog标准text / html并发送到浏览器。一旦它们不再是php变量,它们只是text / html。通过javascript向body.html
发出新请求意味着您引用的那些变量不再可用。它们已经转换为HTML并发送到浏览器,然后php停止了,这是一个新的请求。
说实话,我不知道你想怎么解决这个问题。你可能想要研究像smarty这样的模板系统。或者您可能希望将函数放入名为functions.php
的文件中,将其包含在body.html
中,然后在body.html
中引用这些函数,而不是依赖索引页中的代码。
即。您的body.html
将如下所示:
<?php include "functions.php"; ?>
<div ...>
<?php
$var1 = getVar1(); // function in functions.php
echo $var1->result[0][0];
// ... etc
?>
</div>
然后当它从javascript调用时,在它被传递到浏览器之前,将评估php并且一切都会正常工作。
希望我已经解释过这个好人。 :)
答案 1 :(得分:0)
当您的jQuery请求到达服务器时,它将为您提供body.html,它没有任何PHP处理,因此您在index.php中设置的变量不存在。