Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从JSON文件加载数据时出现问题_Javascript_Json - Fatal编程技术网

Javascript 从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

我试图将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
}

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,而循环已经启动