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

如何在JavaScript onclick事件中重新加载更新后的JSON数据?

问题描述

我原本通过静态导入的方式获取project.json的数据:

import jsondata1 from '../project.json' assert {type: 'json'};
var jsondata1s = JSON.stringify(jsondata1)
document.getElementById("project-btn").onclick ...

但这个JSON文件会被其他进程修改,我希望每次点击按钮时都能重新获取更新后的JSON数据,原本想把导入逻辑放在点击事件里:

document.getElementById("project-btn").onclick = () => {
    //import jsondata1 from '../project.json' assert {type: 'json'};
    var jsondata1s = JSON.stringify(jsondata1)
}

但import语句不能放在函数内部,想问怎么实现这个需求?有没有不需要在代码开头就导入JSON数据的其他方式?

解决方案

不要使用静态import(静态导入的模块会被缓存,无法重新加载最新内容),改用fetch API动态请求JSON文件,每次点击按钮时发起请求即可获取最新数据。

示例代码

document.getElementById("project-btn").onclick = async () => {
  try {
    // 每次点击都请求最新的JSON文件
    // 加时间戳参数避免浏览器缓存旧数据
    const url = `../project.json?t=${Date.now()}`;
    const response = await fetch(url);
    
    if (!response.ok) {
      throw new Error(`请求失败,状态码: ${response.status}`);
    }
    
    const jsondata1 = await response.json();
    const jsondata1s = JSON.stringify(jsondata1);
    
    // 这里添加你需要的后续处理逻辑
    console.log('最新JSON数据:', jsondata1s);
  } catch (error) {
    console.error('获取数据出错:', error);
  }
};

说明

  • fetch每次都会向服务器发起新请求,不会受模块缓存限制,能拿到其他进程修改后的最新JSON内容。
  • 加入时间戳参数?t=${Date.now()}是为了绕过浏览器的缓存机制,确保每次请求的都是最新文件(如果你的服务器配置了禁用静态文件缓存,也可以省略这个参数)。

内容的提问来源于stack exchange,提问作者Albert Badias

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:01:03