javascript - 尝试加载本地 json 文件,但无法在外部范围内读取它
问题描述
我正在尝试读取要在我正在测试的代码中操作的大型本地 .json 文件。下面的代码片段将其加载,并将其返回到我的控制台。
var dataset;
$.getJSON("data.json", function(json) {
dataset = json.rows;
console.log(dataset);
});
但是,当我将 console.log()放在函数之外时,如下所示,我在控制台中返回“未定义”,并在尝试使用“数据集”变量时在其他地方收到错误。
var dataset;
$.getJSON("data.json", function(json) {
dataset = json.rows;
});
console.log(dataset);
JavaScript 新手,但我认为如果在函数外部声明外部变量,您可以更改它吗?是否有 jquery 或我缺少的这个特定功能的东西?目标是将 json 的行加载到 JavaScript 对象中进行操作,不限于任何范围。
谢谢!
解决方案
如果外部变量是在函数外部声明的,那么您能够更改外部变量是正确的。
但是 jQuery 函数默认getJSON
是一个异步函数,这意味着当console.log(dataset);
被调用时dataset
变量仍然是undefined
.
如果你要切换console.log(dataset);
到setInterval(console.log(dataset), 5000);
. 它可能会起作用,但它现在依赖于它总是花费少于或等于 5 秒的假设。
您可以通过将全局 ajax 配置设置为禁用异步来解决此问题。
此代码应按您的意愿工作:
// Switch to synchronous functions.
$.ajaxSetup({ async: false });
var dataset;
$.getJSON("data.json", function(json) {
dataset = json.rows;
});
console.log(dataset);
推荐阅读
- java - 如何传递特定字符串以从数据库android获取特定值
- javascript - 更新数组中的特定对象
- node.js - 我想设置更高的超时值或从我的 node.js 异步摘要请求中删除超时
- vba - 根据自己的价值隔离数据
- kubernetes - 验证数据错误:服务器找不到请求的资源;
- angular - 带有自定义离线页面的 Angular PWA
- node.js - 如何在 Jest 的自定义测试环境文件中使用 TypeScript?
- git - Git 合并获取了“错误”文件,现在重置、恢复或合并特定提交正在与它们一起工作
- java - LineStyleBuilder 和类似的无法解析 setColor() 和其他函数
- reactjs - 是否可以从 Jest 禁用特定的 React 警告(使用 Create React App)