JavaScript 脚本不会加载要处理的 JSON 文件的内容
JavaScript script won't load contents of a JSON file to process
我正在尝试将 JSON 文件加载到 JavaScript 脚本中,以便在网页上的 Mustache 脚本中使用。字符串中的 JSON 正确加载,但文件中的相同 JSON 却没有。
这个有效:
function renderHello() {
var json = JSON.parse('{"cloudy": "This applies to Snowflake.","classic": "This applies to SQL Server."}');
var template = document.getElementById("template").innerHTML;
var rendered = Mustache.render(template, json);
document.getElementById("target").innerHTML = rendered;
}
这不起作用:
function renderHello() {
var json = JSON.parse('./abc.json');
var template = document.getElementById("template").innerHTML;
var rendered = Mustache.render(template, json);
document.getElementById("target").innerHTML = rendered;
}
我在 abc.json 中尝试过的变体:
{
"cloudy": "This applies to Snowflake.",
"classic": "This applies to SQL Server."
}
{"cloudy": "This applies to Snowflake.","classic": "This applies to SQL Server."}
我试过没有成功
var json = './abc.json';
var json = JSON.parse('./abc.json');
var json = JSON.stringify('./abc.json');
var json = JSON.parse(JSON.parse('./abc.json'));
var json = JSON.parse(JSON.stringify('./abc.json'));
Chrome 开发人员工具中经常返回这样的错误:
VM223:1 Uncaught SyntaxError: Unexpected token . in JSON at position 0
at JSON.parse (<anonymous>)
at renderHello (render.js:2)
at onload (docs.html:91)
我在脚本中添加了这些行以显示包含 Mustache 模板的网站文件的位置,因此我知道在哪里找到 abc.json:
var loc = window.location.pathname;
var dir = loc.substring(0, loc.lastIndexOf('/'));
console.log(dir)
文件结构现在是这样的:
目录
--带小胡子的文件-script.html
--abc.json
这可能不相关,但这是 Mustache 脚本,它当然已经可以使用 JSON 作为字符串。
<body onload="renderHello()">
<div id="target">Loading...</div>
<script id="template" type="x-tmpl-mustache">
Hello {{ cloudy }}, {{ classic }}!
</script>
</body>
我使用的建站工具不支持 Node 或 Handlebars。
如果完全相关,目标是从产品文档网站页面中的 JSON 文件填充值,以指示哪些段落适用于哪个产品版本。
您需要通过“AJAX”加载文件内容。您无法像您尝试的那样获取内容。
像这样的东西就可以完成这项工作:
function renderHello() {
fetch('https://jsonplaceholder.typicode.com/users/3').then(r=>r.json())
.then(json=>{
// var template = document.getElementById("template").innerHTML;
// var rendered = Mustache.render(template, json);
document.getElementById("target").innerHTML = JSON.stringify(json,null,2);
})
}
renderHello();
<pre id="target"></pre>
因为我无法访问您的 abc.json
文件,所以我使用了 http://typicode.com 上的公共资源。
我正在尝试将 JSON 文件加载到 JavaScript 脚本中,以便在网页上的 Mustache 脚本中使用。字符串中的 JSON 正确加载,但文件中的相同 JSON 却没有。
这个有效:
function renderHello() {
var json = JSON.parse('{"cloudy": "This applies to Snowflake.","classic": "This applies to SQL Server."}');
var template = document.getElementById("template").innerHTML;
var rendered = Mustache.render(template, json);
document.getElementById("target").innerHTML = rendered;
}
这不起作用:
function renderHello() {
var json = JSON.parse('./abc.json');
var template = document.getElementById("template").innerHTML;
var rendered = Mustache.render(template, json);
document.getElementById("target").innerHTML = rendered;
}
我在 abc.json 中尝试过的变体:
{
"cloudy": "This applies to Snowflake.",
"classic": "This applies to SQL Server."
}
{"cloudy": "This applies to Snowflake.","classic": "This applies to SQL Server."}
我试过没有成功
var json = './abc.json';
var json = JSON.parse('./abc.json');
var json = JSON.stringify('./abc.json');
var json = JSON.parse(JSON.parse('./abc.json'));
var json = JSON.parse(JSON.stringify('./abc.json'));
Chrome 开发人员工具中经常返回这样的错误:
VM223:1 Uncaught SyntaxError: Unexpected token . in JSON at position 0
at JSON.parse (<anonymous>)
at renderHello (render.js:2)
at onload (docs.html:91)
我在脚本中添加了这些行以显示包含 Mustache 模板的网站文件的位置,因此我知道在哪里找到 abc.json:
var loc = window.location.pathname;
var dir = loc.substring(0, loc.lastIndexOf('/'));
console.log(dir)
文件结构现在是这样的:
目录
--带小胡子的文件-script.html
--abc.json
这可能不相关,但这是 Mustache 脚本,它当然已经可以使用 JSON 作为字符串。
<body onload="renderHello()">
<div id="target">Loading...</div>
<script id="template" type="x-tmpl-mustache">
Hello {{ cloudy }}, {{ classic }}!
</script>
</body>
我使用的建站工具不支持 Node 或 Handlebars。
如果完全相关,目标是从产品文档网站页面中的 JSON 文件填充值,以指示哪些段落适用于哪个产品版本。
您需要通过“AJAX”加载文件内容。您无法像您尝试的那样获取内容。
像这样的东西就可以完成这项工作:
function renderHello() {
fetch('https://jsonplaceholder.typicode.com/users/3').then(r=>r.json())
.then(json=>{
// var template = document.getElementById("template").innerHTML;
// var rendered = Mustache.render(template, json);
document.getElementById("target").innerHTML = JSON.stringify(json,null,2);
})
}
renderHello();
<pre id="target"></pre>
因为我无法访问您的 abc.json
文件,所以我使用了 http://typicode.com 上的公共资源。