Javascript 从JSON文件加载数据时出现问题
我试图将json文件的内容加载到数组中。我没有使用回调函数来确保文件在使用前已加载,而是将其编码如下:Javascript 从JSON文件加载数据时出现问题,javascript,json,Javascript,Json,我试图将json文件的内容加载到数组中。我没有使用回调函数来确保文件在使用前已加载,而是将其编码如下: var f_file_loaded = false; var data = null; $.getJSON('transformation.json', function(dt){ f_file_loaded = true; data = dt; }); while(!f_file_loaded){ // Loop until file is loaded } c
var f_file_loaded = false;
var data = null;
$.getJSON('transformation.json', function(dt){
f_file_loaded = true;
data = dt;
});
while(!f_file_loaded){
// Loop until file is loaded
}
console.log('data loaded', data);
但是,这会阻塞浏览器,并且加载的f_文件似乎在任何时候都不会实现。我的代码有什么问题吗?while!f_file_loaded{并不像您期望的那样工作……它只是创建了一个无限循环
您需要使用promise接口
$.when($.getJSON()).done(function() {
// file is loaded, execute whatever code
});
这是因为$.getJSON是一个异步调用 你应该做以下几点:
function data_loaded(data) {
console.log('data loaded', data);
}
$.getJSON('transformation.json', function(dt){
data_loaded(dt);
});
如果要执行同步而非异步调用,请使用 上面的代码
$.ajax("transformation.json", {
dataType:'json',
async:false,
success:function(dt) {
data = dt;
}
});
下载数据后,您下面的代码将继续执行欢迎来到异步调用的世界如果您想对服务器进行同步调用,请查看上的$.ajax异步属性。在这种情况下,为什么不将加载的数据传递到getJSON?为什么要进行包装?这只是一个示例,该函数可以在其他地方定义,并且更加复杂。但是我的qu我知道调用是异步的,但在某个点上,文件最终被加载,f_file_load为true,而循环已经启动