我不认为这可以“干净地”完成,但无论如何我都会问。
我有一个系统需要通过REST GET调用获取JSON资源才能进行初始化。目前系统一直等到onLoad事件并触发ajax请求来检索资源,我认为这不是最好的方法,因为资源需要运行时间。
我想要做的是以某种方式在运行时在HTML标记内加载资源,然后评估内容。但我正在研究的是其他人使用的API,所以我希望以逻辑和标准的方式实现这一点。
那么有没有适合该法案的标签?可以放在doc头中的标签,我将能够在运行时读取和评估内容吗?
此致
克里斯
答案 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 =
”。