我的用例是我编写了一个包含 6 个选项卡的页面。这些选项卡加载我创建的 php 文件索引函数的结果。当我将 USB 驱动器上的文件直接连接到服务器时,一切都很好。在几秒钟内加载页面。但是,我已将文件移动到 NAS 存储驱动器,现在加载页面需要 30-60 多秒。那是因为使用 Bootstrap 选项卡,它会在页面加载时加载所有选项卡。因此它必须在页面加载完成之前加载所有选项卡的所有文件。
我想要做的是让它只加载“当前”选项卡。我知道我可以每次都使用 $POST 并重新加载页面,但老实说,我认为我真正需要做的是使用 AJAX。但我发现的示例令人困惑,我无法调整它们以使其对我有用。
这是我想要发生的事情:
- 最初加载标签为“空”的页面。从视觉上看,这已经发生了,因为我的“登陆”页面是一条欢迎消息,顶部的选项卡链接到相应的索引。
- 单击选项卡时,显示该页面并仅加载该选项卡的文件。通过调用以所需目录为目标并构建文件索引的 PHP 函数来加载文件。所以我想“按需”运行 PHP 函数而不重新加载页面本身。
这是 Bootstrap 选项卡链接的示例:
<li class="nav-item">
<a class="nav-link" data-toggle="tab" href="#movies" role="tab">Movies</a>
</li>
我想我需要做的是向这个调用 AJAX 函数的链接添加一个 onclick
,然后它会依次调用将在该选项卡上显示的选项卡的 PHP 函数被点击。
这是我当前在一个选项卡中运行的代码:
<?php
$allowed = array("mp4", "mkv", "avi", "mov", "mpg", "wmv", "flv", "vob");
$excluded = array("jpg", "nfo", "htaccess", "db");
echo php_file_tree("/smb/movies/", "/movies", "https:xxx[link]",$allowed, $excluded);
unset($allowed, $excluded);
?>
考虑将其包装在这样的函数中:
<?php
function indexmovies() {
$allowed = array("mp4", "mkv", "avi", "mov", "mpg", "wmv", "flv", "vob");
$excluded = array("jpg", "nfo", "htaccess", "db");
echo php_file_tree("/smb/movies/", "/movies", "https:xxx[link]",$allowed, $excluded);
unset($allowed, $excluded);
}
?>
所以,总结一下。我希望页面在加载时只加载 HTML。然后,当单击一个选项卡时,我希望它切换到该选项卡并“按需”加载上述功能。
会想要我想做的工作吗?如果是这样,最好的解决方法是什么?
最佳答案
我为选项卡使用了 Jquery UI。
HTML/ Bootstrap 标签
<div id="tabs">
<ul>
<li><a href="#tabs-1">Tab 1</a>
</li>
<li><a href="#tabs-2">Tab 2</a>
</li>
<li><a href="#tabs-3">Tab 3</a>
</li>
</ul>
<div id="tabs-1">
<p>Content for Tab 1</p>
</div>
<div id="tabs-2">
<p>Content for Tab 2</p>
</div>
<div id="tabs-3">
<p>Content for Tab 3</p>
</div>
</div>
CSS
body {
background-color: #eef;
}
#tabs {
width: 95%;
margin-left: auto;
margin-right: auto;
margin-top: 10px;
}
JQUERY
$("#tabs").tabs({
activate: function (event, ui) {
var active = $('#tabs').tabs('option', 'active');
if(active == '0'){
alert('the tab is 0')
//put your ajax for this tab 0
}
else if(active == '1')
{
alert('the tab is 1')
//put your ajax for this tab 1
}
else if(active == '2')
{
alert('the tab is 2')
//put your ajax for this tab 2
}
}
});
这是 Jsfiddle , 最好的问候。
关于javascript - 如何使 Bootstrap 选项卡仅在单击时加载内容,而不是在页面加载时加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52884516/