我有一个php页面,在页面中间有第二个php页面包括在内,类似于下面:
<?php
main content page
<?php include 'db-info.php';?>
more content
?>
db-info.php显示一个包含数据库信息的表。数据库更新后,我希望主页面显示更新后的结果。如果我把db-info.php页面作为一个独立的页面,我可以让它刷新,但当它包含在主要内容php页面中时,我不知道如何让它刷新。
我不希望经常扫描数据库以触发刷新,因为只有单击按钮时数据库才会更新。关于如何链接按钮点击或数据库更新以刷新db-info.php页面,有什么想法吗?
=====在下面编辑====
谢谢卡莱布和史蒂文,我很感激你的建议。尽管用户在显示数据库信息的同一页面上单击了一个按钮,但该按钮的创建方式与文档编写语法类似(该编辑器不允许我输入实际的按钮代码)单击按钮会在一个单独的javascript文件上触发一个函数。Kaleb,我可以重写数据库信息在主php页面上显示的方式,但主php页面不知道数据库已经更新,除非我不断检查数据库。问题是如何在单击按钮或更新数据库时触发主页面的刷新。我不知道如何捕捉那个事件,也不知道该做什么。单击中的按钮并更新数据库时,db-info.php页面将更新。db-info.php页面已更新,但主要内容php页面仍继续显示最初加载主php页面时加载的相同(过时)db-infophp页面。
=====================更新=====================
我移动了按钮,使其位于主内容php页面上。该按钮触发javascript来更新数据库。现在,由于按钮在具有的同一页面上
<?php include 'db-info.php';?>
我应该能够用onclick做两件事,运行javascript,并以某种方式加载和重新加载db-info.php页面???大概
====================更新=====================我将重写主要内容php页面,将数据库信息表直接构建到主页中。我仍然需要一种与整个主页内容分开刷新数据的方法。
=============请将此问题标记为已回答=============
我为我最初的问题不够清楚而道歉。此外,一开始我不理解给出的答案,但现在我意识到它们为我指明了正确的方向。再次感谢您的帮助。我计划重新编写主内容页面,以在div的innerHTML中显示数据库信息,例如:
http://www.w3schools.com/php/php_ajax_database.asp
数据库信息将显示在这个div 中
<div id="dbInfoHere">Database info will be listed here</div>
使用这个ajax从数据库获取更新的信息
document.getElementById("dbInfoHere").innerHTML = xmlhttp.responseText;
xmlhttp.open("GET","save-rankings.php?q="+str,true);
在本例中,javascript是用select onchange事件调用的。我可以从按钮onclick事件
选项#1
如果您想要一个简单的ajax更新,比如说,当用户按下刷新按钮时,请尝试使用jQuery的.get或.post方法
http://api.jquery.com/jquery.get/
$.get("ajax/test.html",函数(数据){$(".result").html(数据);alert("加载已执行。");});
选项#2
如果你在寻找实时或"推送"更新,你需要websockets和mysql触发器。您需要一个"守护进程"脚本来处理您的连接,并且您需要向该脚本通知数据库的更改情况。
结账http://dev.mysql.com/doc/refman/5.1/en/create-trigger.html#c10251作为mysql触发器的起点
并查看如何在PHP中创建websockets服务器,作为守护进程服务的起点。
选项#3"实时"的另一个选项是使用"拉"方法,这取决于你需要容纳多少用户和你的服务器统计数据。在这种情况下,您使用javascript计时器每隔X秒执行选项1中提到的ajax请求。
与构建推送服务或与现有服务集成相比,这要容易得多,但很明显,如果没有新数据,用户就会向服务器发出不必要的请求,而且从技术上讲,这不是"实时",因为它只会在您设置计时器时快速更新
---更新---
刷新按钮需要位于正在刷新的元素之外。所以我推荐这样的东西:
<div>
<button onclick="updateData();">Refresh</button>
</div>
<div id="dataContainer">
<?php include "db-info.php"; ?>
</div>
<script>
function updateData(){
$.get( "db-info.php", function(data ) {
$( "#dataContainer" ).html( data );
});
};
</script>
此外,我会尽量避免在加载初始数据时进行额外的ajax回调,除非有原因。通过使用php include进行初始页面加载,您可以在每次页面加载时为自己节省至少1个额外的请求。
首先,不要嵌套php标签。这将导致页面失败
其次,使用AJAX是在不刷新页面的情况下实现这一点的方法。你只需要使用AJAX从页面中获取数据,然后显示它
PHP页面:
<?php
$data = array(
"message": "This is JSON data"
);
echo @json_encode($data);
JavaScript:
$(function()
{
var jdata = { "task": "do_something" };
$.get('db-info.php', {data: jdata}, function(data)
{
// PHP script returns JSON data.
// message is an object that's returned
// and added to the data object.
alert(data.message);
});
});