使用 require 加载本地 json 文件?
Loading local json file with require?
我已经在谷歌上搜索了几个小时,以为我只是在这里问。出于某种原因,我的 'require()' 不起作用。 recuirejs 已包含在内,据我所知,我的 return 值应该是我的数据,其顺序与我的 json 文件完全相同。
这是我的代码:
$(document).ready(async function() {
let data = await fetchData('./data/file.json');
console.log(data);
}
// fetch and return data
function fetchData(path) {
return require([path]);
}
我最初有这个解决方案(它适用于本地主机,但我需要它而没有主机):
function fetchData(path) {
return fetch(path).then(response => {
return response.json().then((data) => {
return data;
}).catch((err) => {
console.log(err);
})
});
}
它给了我几个脚本错误和 MIME 类型不匹配,而且它记录了这个而不是我的数据:
s(e, t, i)
arguments: null
caller: null
>defined: function defined(e)
isBrowser: true
length: 3
name: "s"
>prototype: Object { … }
>specified: function specified(e)
>toUrl: function toUrl(e)
>undef: undef(i)
我不知道我还应该尝试什么。
谢谢!
RequireJS 与 Node.js 的 require 方法不兼容。它专为 AMD modules not CommonJS modules 而设计,不支持加载纯 JSON 文件。这就是您第一次尝试失败的原因。
您的第二次尝试失败,因为 file systems requests are treated as cross-origin requests。
在加载文件系统上工作时加载 JSON 文件的唯一方法是让用户 select 使用 <input type="file">
然后 read it with JavaScript。
如果您想阅读硬编码 JSON,那么您可以考虑将其嵌入到您的应用程序中。做到这一点的简单方法是将其作为 JS 对象文字粘贴。更复杂的程序可能会受益于使用 Webpack (which would need a JSON loader 之类的工具)并在构建时将其拉入 JS,而不是在开发时(上述粘贴方法)或 运行 时(这是不可能的,如前几段)。
你有两个选择:
- 使用像 Webpack 这样的工具将所有前端文件放入包中
- 从网络服务器下载 JSON 文件:
我假设您已经在使用 jQuery,所以:
$.get('https://petstore.swagger.io/v2/swagger.json').then(function(data) {
console.log(data.swagger);
});
在这种情况下,您必须让您的 json 文件可用于网络服务器
$.get('/dist/data/file.json').then(function(data) {
console.log(data);
});
我已经在谷歌上搜索了几个小时,以为我只是在这里问。出于某种原因,我的 'require()' 不起作用。 recuirejs 已包含在内,据我所知,我的 return 值应该是我的数据,其顺序与我的 json 文件完全相同。
这是我的代码:
$(document).ready(async function() {
let data = await fetchData('./data/file.json');
console.log(data);
}
// fetch and return data
function fetchData(path) {
return require([path]);
}
我最初有这个解决方案(它适用于本地主机,但我需要它而没有主机):
function fetchData(path) {
return fetch(path).then(response => {
return response.json().then((data) => {
return data;
}).catch((err) => {
console.log(err);
})
});
}
它给了我几个脚本错误和 MIME 类型不匹配,而且它记录了这个而不是我的数据:
s(e, t, i)
arguments: null
caller: null
>defined: function defined(e)
isBrowser: true
length: 3
name: "s"
>prototype: Object { … }
>specified: function specified(e)
>toUrl: function toUrl(e)
>undef: undef(i)
我不知道我还应该尝试什么。
谢谢!
RequireJS 与 Node.js 的 require 方法不兼容。它专为 AMD modules not CommonJS modules 而设计,不支持加载纯 JSON 文件。这就是您第一次尝试失败的原因。
您的第二次尝试失败,因为 file systems requests are treated as cross-origin requests。
在加载文件系统上工作时加载 JSON 文件的唯一方法是让用户 select 使用 <input type="file">
然后 read it with JavaScript。
如果您想阅读硬编码 JSON,那么您可以考虑将其嵌入到您的应用程序中。做到这一点的简单方法是将其作为 JS 对象文字粘贴。更复杂的程序可能会受益于使用 Webpack (which would need a JSON loader 之类的工具)并在构建时将其拉入 JS,而不是在开发时(上述粘贴方法)或 运行 时(这是不可能的,如前几段)。
你有两个选择:
- 使用像 Webpack 这样的工具将所有前端文件放入包中
- 从网络服务器下载 JSON 文件:
我假设您已经在使用 jQuery,所以:
$.get('https://petstore.swagger.io/v2/swagger.json').then(function(data) {
console.log(data.swagger);
});
在这种情况下,您必须让您的 json 文件可用于网络服务器
$.get('/dist/data/file.json').then(function(data) {
console.log(data);
});