【问题标题】:Load JSON at runtime rather than dynamically via AJAX在运行时加载 JSON,而不是通过 AJAX 动态加载
【发布时间】:2023-03-24 19:49:02
【问题描述】:

我不认为这可以“干净”地完成,但我还是会问。

我有一个系统需要通过 REST GET 调用获取 JSON 资源才能进行初始化。目前系统一直等到 onLoad 事件并触发一个 ajax 请求来检索资源,我认为这不是最好的方法,因为资源需要一个运行时间。

我想做的是以某种方式在运行时将资源加载到 HTML 标记内,然后评估内容。但我正在研究的是一个供其他人使用的 API,所以我想以一种合乎逻辑和基于标准的方式来实现这一点。

那么有没有什么标签符合要求?可以放置在文档头中的标签,我将能够在运行时读取和评估其内容?

问候,

克里斯

【问题讨论】:

  • 我目前正在查看链接标签 - 并想知道如何才能完成这项工作。

标签: javascript html dom


【解决方案1】:

也许我不明白,但你不能:

<?php
$json_data = json_encode($your_data);
?>

<script>
var data = <?= $json_data ?>;
</script>

【讨论】:

    【解决方案2】:

    缺少 CDN 缓存(Akamai 等)会成为您的问题吗?如果没有,您可以在页面上放置一个脚本标记,将 src 属性指向服务器端脚本,该脚本返回具有 javascript mime 类型的内容并包含您请求的 JS 对象。这就像包含一个外部脚本,只是动态生成的。

    例如:

    在头部,有类似的东西:

    <script src="/js/loadjs.php?id=123"></script>
    

    并让 loadjs.php 返回类似:

    var MyApp.initData = { id: 123, setting1: "xyz" };
    

    缺点是您将无法通过 CDN 缓存它。如果您需要,我认为浏览器缓存仍然可以工作。

    【讨论】:

    • 正如我在对 Ant P 的评论中所说的那样。我无法控制服务器,我必须按原样访问此 REST Web 服务。它只返回 JSON (mime-type=application/json),而不是分配给变量的 JavaScript 或 JSON。
    【解决方案3】:

    我想把它放在 iframe 中,但后来我意识到你有一个问题,内容类型是 application/json。当我测试 FF 时,IE 和 Chrome 正在尝试下载文件并询问用户将其存储在哪里(Opera 显示文件)

    将其放入 LINK 对您没有帮助,因为浏览器不会尝试获取文档(它只获取已知资源,如样式表)

    在我看来,您必须使用 AJAX。您能详细说明为什么会出现问题吗?

    【讨论】:

    • 我一直在做大量的搜索,我认为我正在尝试做的事情基本上是不可能的,所以正如你所说,最好还是坚持我目前的 AJAX 解决方案。
    【解决方案4】:

    JSON 本身什么都不做;你不能只使用&lt;script&gt; 来包含它,因为它会创建一个被分配给......无处的对象。您必须对其进行修改 - 将其放入 JS 字符串中进行解析或在其前面添加“var foo =”。

    【讨论】:

    • 感谢您的意见,但我不能这样做,修改资源不是一种选择。我需要找到一种处理 JSON 的方法。就像我说的,我有一种感觉,我目前通过 AJAX 的方法是这里唯一干净的路线。
    【解决方案5】:

    您可以控制任何服务器吗?因为如果是,您可以使用您的服务器代理服务并使用适当的“var”语句包装 JSON 响应。

    或者,我相信这会起作用(我没有测试过,而且我总是错误地大写“innerHtml”),尽管 IMO 它不是非常干净:

    <script id="data" src="http://someotherserver.com/json.js"></script>
    <script type="text/javascript">
        var dataElem = document.getElementById("data");
        if (dataElem)
        {
            var myData = eval(dataElem.innerHtml);
        }
    </script>
    

    外科医生的警告:评估来自您无法控制的服务器的结果是个坏主意。

    【讨论】:

    • 通常我会降低这样的答案。您确实意识到 script-tag 没有 innerHTML! 或任何其他直接访问远程脚本数据的方法。这就是 AJAX 的 = XHR 成功的原因。
    • @Lo - 至少在 Firefox 和 Chrome 中,脚本标签肯定有一个 innerHTML;我没试过IE
    猜你喜欢
    • 2015-02-10
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    相关资源
    最近更新 更多