Javascript 如何使用requirejs加载静态JSON文件?

Javascript 如何使用requirejs加载静态JSON文件?,javascript,json,requirejs,Javascript,Json,Requirejs,我想保存一个JSON文档来存储一些简单的数据,我想需要这个文档并在define()调用中使用JSON对象,这样我就可以使用它了。这不是一个async调用。我的意思是它应该是用于开发的,但我确实希望在构建时编译文件,而不是像API中实际的异步调用那样,在API中内容是动态的。最简单的方法是使用RequireJSON插件,这将允许您将文件也包含到构建中 以下是一个例子: require(['json!someFile.json'], function(data){ ... }) // It d

我想保存一个JSON文档来存储一些简单的数据,我想需要这个文档并在
define()
调用中使用JSON对象,这样我就可以使用它了。这不是一个
async
调用。我的意思是它应该是用于开发的,但我确实希望在构建时编译文件,而不是像API中实际的
异步调用那样,在API中内容是动态的。

最简单的方法是使用RequireJSON插件,这将允许您将文件也包含到构建中


以下是一个例子:

require(['json!someFile.json'], function(data){
  ...
})
// It does not actually need to be a .json extension, this will work to:
require(['json!someFile'], function(data){
  ...
})
如果要在r.js构建中包含该文件,以便在主/js引导文件中始终对其进行优化,则必须将其添加到include选项中

您也可以使用requireJS文本插件,它通常用于加载模板文件,但您也可以使用它加载.json文件

您必须自己解析内容,然后使用
JSON.parse

(如果需要,包括为旧浏览器提供支持)

您还可以将json封装在它自己的define()中,这样您就可以按照传统方式要求它,但如果您仅限于实际的
.json
文件,则这将不起作用

另一种选择是,需要使用jquery或其他工具,通过ajax自己创建文本文件

$.get('somefile.json', function(data) {
  // do something with your data
});

将此发布为答案,因为:

  • 这是问问题的用户实际使用的解决方案
  • 它比需要的文本更清晰,因为它总是为您执行JSON.parse()
。语法很简单:

require(['json!someData.json'], function(data){
  ...
})

那你的问题到底是什么?因为我看不出有什么问题。@WillemD'haeseleer嗯,我不知道该怎么做。我不能在路径中包含
.json
文件。我使用了
requirejs插件
,它有一个我完全忽略的
json
插件。但它使用
文本
作为依赖项。谢谢!我今天刚开始在浏览器上使用requirejs,它太棒了。我仍然希望,当我构建文档时,它将停止使用ajax来获取文档。@ThomasReggi检查我的修改答案,以了解我在使用文本时遇到的问题!当与r.js结合进行优化时,用于JSON内容。只是提醒一下。@simpleascould请详细说明你的建议troubles@WillemD“haeseleer我有时使用
text/json,然后对其进行解析以获取配置值。这在dev中有效,但是r.js优化器抛出了一个错误。我将它隔离到特定的文件中,当替换为amd define(如
/colors
)中包装的标准模块时,优化器不再出现故障。我对根本原因不感兴趣,只是必须完成这项工作。如果您愿意,我很乐意脱机交谈。对于那些认为这一点不清楚的人,[“json!/some/ajax/endpoint”]很好用。是否可以加载本地文件?@erik我通常使用Web服务器(通过gulp)在本地开发,所以总是加载http://或https://URL。我建议你也这样做。如果你问的是file://url,我不知道。