Javascript 在运行时加载JSON,而不是通过AJAX动态加载

Javascript 在运行时加载JSON,而不是通过AJAX动态加载,javascript,html,dom,Javascript,Html,Dom,我不认为这可以干净利落地完成,但我还是会问的 我有一个系统,它需要通过REST get调用获取JSON资源,以便进行初始化。此时,系统等待onLoad事件并发出ajax请求来检索资源,我认为这不是最好的方法,因为运行时需要资源 我想做的是在运行时以某种方式将资源加载到HTML标记中,然后评估内容。但我正在开发的是一个供其他人使用的API,所以我希望以一种基于逻辑和标准的方式实现这一点 那么,有没有合适的标签?一个可以放在文档头上的标签,我可以在运行时读取和评估它的内容 问候, 克里斯JSON本身

我不认为这可以干净利落地完成,但我还是会问的

我有一个系统,它需要通过REST get调用获取JSON资源,以便进行初始化。此时,系统等待onLoad事件并发出ajax请求来检索资源,我认为这不是最好的方法,因为运行时需要资源

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

那么,有没有合适的标签?一个可以放在文档头上的标签,我可以在运行时读取和评估它的内容

问候,


克里斯

JSON本身什么都不做;您不能仅使用包含它,因为它将创建一个对象,该对象将被分配给。。。无处您必须对其进行修改—要么将其放入JS字符串中进行解析,要么在其前面粘贴一个var foo=。

JSON本身不起任何作用;您不能仅使用包含它,因为它将创建一个对象,该对象将被分配给。。。无处您必须对其进行修改-要么将其放入JS字符串中进行解析,要么在其前面粘贴一个var foo=。

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

例:

在头脑中,有类似于:

<script src="/js/loadjs.php?id=123"></script>
var MyApp.initData = { id: 123, setting1: "xyz" };

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

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

例:

在头脑中,有类似于:

<script src="/js/loadjs.php?id=123"></script>
var MyApp.initData = { id: 123, setting1: "xyz" };

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

也许我不理解,但您不能:

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

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

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

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

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

我本来想把它放在一个iframe中,但后来我意识到您有一个问题,内容类型是application/json。当我测试FF时,IE和Chrome试图下载该文件,并询问用户在哪里存储该文件

将它放在链接中对您没有帮助,因为浏览器不会尝试获取它仅为已知资源(如样式表)获取的文档


在我看来,您必须使用AJAX。你能详细解释一下为什么会出现这个问题吗?

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

将它放在链接中对您没有帮助,因为浏览器不会尝试获取它仅为已知资源(如样式表)获取的文档


在我看来,您必须使用AJAX。您能否详细说明这是一个问题的原因?

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

或者,我相信这会起作用,因为我没有测试它,而且我总是错误地将innerHtml资本化,尽管在我看来它不是非常干净:

<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>

卫生部长警告:从您无法控制的服务器上评估结果是个坏主意。

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

或者,我相信这会起作用,因为我没有测试它,而且我总是错误地将innerHtml资本化,尽管在我看来它不是非常干净:

<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>

卫生部长警告:评估来自您无法控制的服务器的结果是一个坏主意。

我正在查看链接标签,想知道如何才能做到这一点。我正在查看链接标签,想知道如何才能做到这一点。谢谢您的输入,但我不能这样做,修改资源不是一个选项。我需要找到一种处理JSON的方法。就像我说的,我有一种感觉,我目前通过AJAX的方法是这里唯一干净的路线。谢谢你的输入,但我不能这样做,修改资源不是一个选项。我需要找到一种处理JSON的方法。就像我说的,我有一种感觉,我目前通过AJAX的方法是这里唯一干净的路线
按原样访问此REST web服务。它只返回JSON mime type=application/JSON,而不是分配给变量的JavaScript或JSON。它只返回JSON mime type=application/JSON,而不是分配给变量的JavaScript或JSON。我已经做了很多搜索,我认为我试图做的基本上是不可能的,正如你所说,最好还是坚持我目前的AJAX解决方案。我已经做了很多搜索,我认为我尝试做的基本上是不可能的,所以正如你所说的,最好还是坚持我目前的AJAX解决方案。通常我会对这样的答案降低评价。您知道脚本标记没有innerHTML!,或访问远程脚本数据的任何其他直接方法。这就是AJAX=XHR成功的原因。@Lo-至少在Firefox和Chrome中,脚本标记肯定有一个innerHTML;我还没有试过,通常我会对这样的答案评价较低。您知道脚本标记没有innerHTML!,或访问远程脚本数据的任何其他直接方法。这就是AJAX=XHR成功的原因。@Lo-至少在Firefox和Chrome中,脚本标记肯定有一个innerHTML;我还没试过