【问题标题】:How to fetch some JSON files on page load? (Is synchronous inevitably bad)?如何在页面加载时获取一些 JSON 文件? (同步不可避免地不好)?
【发布时间】:2026-02-07 11:35:01
【问题描述】:

我有一个 Web 应用程序,其全部功能依赖于从服务器获取并在加载主页时处理的 3 个 JSON 文件。目前,我使用带有“async:false”的 jQuery AJAX 调用,它工作正常。但是我读到的所有内容都在向我大喊同步 AJAX 是邪恶的,我应该将其重构为异步行为。当然,我可以这样做,但代价是(如我所见)使代码更加混乱,因为整个应用程序将被加载到 AJAX 成功函数中。

我的问题是我是否真的应该继续重构,因为在我看来这似乎是同步行为的合理案例。是的,如果 AJAX 调用出现问题,应用程序将无响应,但如果加载关键 JS 文件之一出现问题,它也会无响应,不是吗?并且考虑到应用程序在 JSON 文件被加载之前实际上是不可用的(不能做任何有价值的事情),这有关系吗?

也许我错过了一种加载 JSON 文件的简单方法,它根本不涉及使用 AJAX?当然,这将是一个更清洁的解决方案。

【问题讨论】:

  • 您应该问自己的一个问题是“如果加载 JSON 需要很长时间,我的网站还能正常工作吗?”
  • 来自“从服务器获取并在加载主页时处理的文件”我可以简单地徘徊为什么你不能只加载带有页面的json文件并需要ajax?

标签: javascript jquery ajax asynchronous


【解决方案1】:

如果文件位于您的服务器中,也许您可​​以尝试这种方法:

在文件中这样定义 JSON:

data = '[
    {"name" : "Ashwin", "age" : "20"},
    {"name" : "Abhinandan", "age" : "20"}
]';

然后,您只需在 HTML 中包含 json 文件。

<script type="text/javascript" src="data.json"></script>
<script type="text/javascript" src="javascrip.js"></script>

最后,只需将数据用作变量:

var mydata = JSON.parse(data);

免责声明: 我在 10 分钟前才发现这个 here

【讨论】:

  • 我之前遇到过该链接,但并没有认真考虑,因为要求 JSON 文件实际上应该采用非 JSON 格式。但是,在重新阅读时,我意识到这给了我理想的解决方案,因为我可以在服务器端生成所需的 JS 文件,其中包含 JSON 数据和对变量的赋值。无论如何,JSON 都是在服务器端生成的,所以我需要做的就是稍微调整一下。
  • 有人认为这是一个非常错误的方法吗?我的意思是糟糕的编程风格会导致将来后悔?我发现它非常有用,但真的很担心这种方法
  • 哪方面的编程风格不好?
  • 我不是提出异议而是怀疑,不是铁杆程序员,但感觉有点不标准,有没有专家在这里提供建议?
  • 这种方法是完全有效的,绝不是不标准的。它在全局范围内引入 JSON 数据有一个缺点,但如果你能接受,那么没有理由不这样做。
【解决方案2】:

有效吗?首先,不要“修复”没有损坏的东西。

至于你是否应该使用异步模式,你的这个应用程序是在本地局域网上运行还是在公共互联网上运行?在前一种情况下,假设您不太可能遇到带宽问题可能是安全的,因此除了理想的原因之外,几乎没有理由切换到异步。

但是,如果它在公共互联网上运行,则可能会出现各种与网络相关的问题,并且您不能依赖服务器/客户端连接在会话过程中保持良好状态。在这种情况下,必须使用具有某种加载/活动屏幕的异步方法,以及适当稳健的错误处理/恢复以及在理想连接状态不可用的情况下降级到应用程序的更简单版本,如果在一切皆有可能

【讨论】:

    【解决方案3】:

    针对 Defesa Esquerdo 的建议,我采用了我评论中提到的方法。它运行良好,并且是一个简单的更改。我觉得我在这里回避了我自己的问题,但这是解决我的问题的好方法 - 简化代码也提高了效率。

    【讨论】:

    • 回答基于活动、最旧、投票的移位位置。请在该回答评论部分提及或标记接受的答案
    最近更新 更多