You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何点击标签按钮时仅重载div内PHP include文件无需整页刷新

垂直标签按需加载/重载PHP内容实现方案

核心通过原生AJAX实现局部请求,仅更新对应标签的容器内容,不需要整页刷新,可按需选择「首次点击才加载」或「每次点击都重载最新内容」两种模式。

第一步:修改HTML结构

删除所有.tabcontent容器内的PHP引入代码,仅保留空容器,避免页面初始化就加载全部PHP文件:

<!-- 标签按钮部分代码保持原有逻辑不变 -->
<div id="stockinven" class="tabcontent"></div>
<div id="storeinbounddiv" class="tabcontent"></div>
<div id="inboundinventory" class="tabcontent"></div>
<div id="outboundinventory" class="tabcontent"></div>
<div id="historyinventory" class="tabcontent"></div>
<div id="inboundedit" class="tabcontent"></div>
<div id="outboundedittab" class="tabcontent"></div>

第二步:修改JavaScript逻辑

先建立标签ID和对应PHP文件的映射表,再修改原有的openCity函数,增加请求加载逻辑:

// 标签ID与对应PHP文件的映射,后续修改路径只需要调整这个对象即可
const tabPhpMap = {
  'stockinven': 'stockinventoryavailabilty.php',
  'storeinbounddiv': 'stockinventoryupcomingstock.php',
  'inboundinventory': 'stockinventoryinbound.php',
  'outboundinventory': 'stockinventoryoutbound.php',
  'historyinventory': 'stockinventoryhistory.php',
  'inboundedit': 'stockinboundedit.php',
  'outboundedittab': 'stockoutboundedit.php'
}
// 可选:已加载标签的缓存标记,不需要每次点击都重复请求的场景使用
const loadedTabs = new Set()

// 原有标签切换函数不用修改,仅更新openCity核心逻辑
function openCity(evt, cityName) {
  var i, tabcontent, tablinks;
  tabcontent = document.getElementsByClassName("tabcontent");
  for (i = 0; i < tabcontent.length; i++) {
    tabcontent[i].style.display = "none";
  }
  tablinks = document.getElementsByClassName("tablinks");
  for (i = 0; i < tablinks.length; i++) {
    tablinks[i].className = tablinks[i].className.replace(" active", "");
  }
  const targetTab = document.getElementById(cityName);
  targetTab.style.display = "block";
  evt.currentTarget.className += " active";

  // --------------- 新增内容加载逻辑 ---------------
  // 如果需要每次点击都重载最新内容,删除下方if判断、loadedTabs相关代码即可
  if (!loadedTabs.has(cityName)) {
    // 可选:加载状态提示,优化用户体验
    targetTab.innerHTML = '<p>内容加载中...</p>';
    // 发起请求拉取PHP文件内容
    fetch(tabPhpMap[cityName])
      .then(response => {
        if (!response.ok) throw new Error('请求失败');
        return response.text();
      })
      .then(html => {
        targetTab.innerHTML = html;
        loadedTabs.add(cityName); // 标记为已加载,后续切换无需重复请求
      })
      .catch(error => {
        targetTab.innerHTML = '<p>内容加载失败,请刷新重试</p>';
        console.error('加载错误:', error);
      });
  }
}

两种需求切换说明

  • 实现「点击标签时才加载对应PHP文件,加载过的标签切换时不再重复请求」:直接使用上述代码即可,保留缓存逻辑
  • 实现「每次点击标签都重载对应PHP的最新内容」:删除代码中if (!loadedTabs.has(cityName))判断、loadedTabs.add(cityName)和const loadedTabs = new Set()定义即可,每次点击都会拉取最新内容

注意:PHP文件路径请根据实际项目目录结构调整映射表tabPhpMap中的路径即可。

内容的提问来源于stack exchange,提问作者A. Chithrai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 05:15:03