我使用twitter bootstrap的导航栏。每个选项卡的内容来自一个php函数,该函数从数据库中加载数据。一旦页面加载,我希望能够刷新每个选项卡下的数据(这等于再次调用各自的php函数)对选项卡的变化。我想这将是jquery的onclick()事件,但我如何更新内容?
<?php
require_once 'Offers.php';
$offers = new Offers();
?>
<div class="navbar">
<div class="navbar-inner">
<ul class="nav" id="mytab">
<li class="active"><a href="#tab1" data-toggle="tab">A</a></li>
<li><a href="#tab2" data-toggle="tab">B</a></li>
<li><a href="#tab3" data-toggle="tab">C</a></li>
</ul>
</div>
</div>
<div class="tab-content">
<div class="tab-pane active" id="tab1">
<?php echo($offers->retrieveA());?>
</div>
<div class="tab-pane" id="tab2">
<?php echo($offers->retrieveB());?>
<div class="tab-pane" id="tab3">
<?php echo($offers->retrieveC());?>
</div>
这是一个使用ajax的非常简单的解决方案。
首先,我们为每个选项卡附加一个jquery事件click,然后触发对函数的ajax调用。因为通常ajax事件调用文件中的一些php脚本,这里我们必须处理函数,我们把它们放在一个单独的php文件中,并使用switch case
语句在它们之间进行选择。
我们开始。首先我们给导航栏选项卡添加id:
<li class="active"><a href="#tab1" data-toggle="tab" id="nav1">A</a></li>
<li><a href="#tab2" data-toggle="tab" id="nav2">B</a></li>
<li><a href="#tab3" data-toggle="tab" id="nav3">C</a></li>
然后单击每个选项卡的事件处理程序。每个处理程序都使用ajax来更新选项卡内容。
//Functions to dynamically update navbar
$('#nav1').click(function() {
$.ajax({ url: 'refreshTabContent.php',
data: {whichTab: 'tab1'},
type: 'post',
success: function(output) {
$('#tab1').html(output);
}
});
});
$('#nav2').click(function() {
$.ajax({ url: 'refreshTabContent.php',
data: {whichTab: 'tab2'},
type: 'post',
success: function(output) {
$('#tab2').html(output);
}
});
});
$('#nav3').click(function() {
$.ajax({ url: 'refreshTabContent.php',
data: {whichTab: 'tab3'},
type: 'post',
success: function(output) {
$('#tab3').html(output);
}
});
});
这是如何。在每个处理程序中,我们调用我们即将编写的新php脚本'refreshTabContent.php'。在该脚本中,基于whichTab
的值,我们调用相应的函数,该函数返回我们想要在适当的选项卡中显示的内容,然后将其回显。
<?php
require_once 'Offers.php';
$offers = new Offers();
if(isset($_POST['whichTab']) && !empty($_POST['whichTab'])) {
$action = $_POST['whichTab'];
switch($action) {
case 'tab1' :
echo($offers->retrieveA());
break;
case 'tab2' :
echo($offers->retrieveB());
break;
case 'tab3' :
echo($offers->retrieveC());
break;
}
}
?>
在不重新加载整个页面的情况下更新任何内容的唯一方法是通过javascript/jQuery,特别是在您的情况下使用ajax。因此,您必须将onclick
附加到您的选项卡,该选项卡运行ajax回调到您的PHP文件。(我不记得bootstrap如何附加自己的onclick
,所以如果它根本不工作,那就是我首先检查的地方)。
然而,我个人会以一种可以接受$_GET
参数的方式编写第二个版本的PHP文件,这样它就可以只返回所选选项卡的内容。结果通过ajax返回,然后您可以将其发送回选项卡。
根据您从PHP获取的内容,这可能会导致单击选项卡时短暂的加载暂停。
我真的不确定是否值得提前加载选项卡内容,如果你要在点击选项卡时重新加载它。没有更多的细节很难说。