gpt4 book ai didi

php - jQuery .load() 中断加载到 html 正文中的 PHP 变量

转载 作者:行者123 更新时间:2023-11-27 22:40:25 24 4
gpt4 key购买 nike

所以我有一个有趣的问题

我在使用 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

我问过我的几个 friend ,他们都被难住了,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');

最佳答案

当您第一次加载 body.html 时,我猜您是在使用 php 的 include() 函数加载它。好吧,它所做的是“连接”php,因此在服务器端它就像一个长的 php 文件。这适用于您的变量,因为它好像代码中没有中断。

当您使用 jQuery 的 load() 函数时,这种情况发生在客户端。正在发生的事情是,您正在获取 JUST body.html 的 html 输出,并且您动态地(在客户端)将该内容放入客户端页面。

您现在遇到的问题是 PHP 不再串联。 load()body.html 单独放入页面中。

另一种看待它的方式是,当有人访问 index.php 时,php 被解析,所有被回显的变量都变成了沼泽标准文本/html 并发送到浏览器。一旦到达那里,它们就不再是 php 变量,它们只是文本/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 将被评估,一切都会正常工作。

希望我已经解释清楚了,伙计。 :)

关于php - jQuery .load() 中断加载到 html 正文中的 PHP 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11278633/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com