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

时间:2008-12-28 05:09:06

标签: javascript html dom

我不认为这可以“干净地”完成,但无论如何我都会问。

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

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

那么有没有适合该法案的标签?可以放在doc头中的标签,我将能够在运行时读取和评估内容吗?

此致

克里斯

5 个答案:

答案 0 :(得分:3)

也许我不理解,但你不能只是:

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

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

答案 1 :(得分: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缓存它。我认为如果你需要,浏览器缓存仍然有用。

答案 2 :(得分:1)

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

将它放在LINK中对你没有帮助,因为浏览器不会尝试获取文档(它只提取样式表等已知资源)

对我来说,你似乎必须使用AJAX。你能详细说明为什么会出现这个问题吗?

答案 3 :(得分:1)

您是否可以控制任何服务器?因为如果是,您可以使用服务器代理服务并使用适当的“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>

Surgeon General的警告:从您无法控制的服务器中评估结果是一个坏主意。

答案 4 :(得分:0)

JSON本身什么都不做;你不能只使用<script>来包含它,因为它会创建一个被分配给......的对象。你必须修改它 - 要么把它放在一个JS字符串中解析或粘贴在它前面的“var foo =”。