Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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_Ajax_Xmlhttprequest - Fatal编程技术网

如何在JavaScript中同步加载JSON?

如何在JavaScript中同步加载JSON?,javascript,ajax,xmlhttprequest,Javascript,Ajax,Xmlhttprequest,我正试图建立一个HTML5游戏,但我遇到了一个问题。我正在尝试设计游戏,使它可以模块化;我的方法是使用一个JSON文件来加载不同的模块 我试过的代码 var resources = {}; $.ajaxSetup({ async: false }); $.getJSON('res/gen/generators.json', function (data) { resources.generators = data; }); for (let generator in resourc

我正试图建立一个HTML5游戏,但我遇到了一个问题。我正在尝试设计游戏,使它可以模块化;我的方法是使用一个JSON文件来加载不同的模块

我试过的代码

var resources = {};

$.ajaxSetup({
  async: false
});

$.getJSON('res/gen/generators.json', function (data) {
  resources.generators = data;
});

for (let generator in resources.generators) {
  $.getScript("res/gen/" + resources.generators[generator].folder + "/script.js");
}

$.ajaxSetup({
  async: true
});
JSON文件

{
  "memoryless": {
    "folder": "memoryless",
    "name": "Memoryless",
    "description": "Generates a piece with no regard to the previous history."
  }
}

不幸的是,我收到一个错误,上面说“[Deprecation]主线程上的同步XMLHttpRequest已被弃用,因为它会对最终用户的体验造成有害影响。有关更多帮助,请检查。”,但我不希望在加载这些代码之前运行任何其他代码。我该怎么办?

与JavaScript的异步特性作斗争将导致“不好”的开发体验。接受异步性

在这里,我们开始嵌套承诺和回调:

var resources = {};

$.getJSON('res/gen/generators.json', function (data) {
  resources.generators = data;

  $.when(Object.keys(resources.generators).map(function(generator) { 
    return $.getScript("res/gen/" + resources.generators[generator].folder + "/script.js");
  }).then(function() {
    ...do other stuff
  })
});
或者,您可以使用:

作为另一种选择,您可以放弃定制模块系统,使用标准:


与JavaScript的异步特性作斗争将导致“不好”的开发体验。接受异步性

在这里,我们开始嵌套承诺和回调:

var resources = {};

$.getJSON('res/gen/generators.json', function (data) {
  resources.generators = data;

  $.when(Object.keys(resources.generators).map(function(generator) { 
    return $.getScript("res/gen/" + resources.generators[generator].folder + "/script.js");
  }).then(function() {
    ...do other stuff
  })
});
或者,您可以使用:

作为另一种选择,您可以放弃定制模块系统,使用标准:


将他们放在回调中学习如何处理AJAX中的第一个A代表什么。。。异步的。。。顺便说一句,您得到的不是错误,而是警告,因此您的代码可以按您希望的方式工作。下一步要学习的是在没有jQuery的情况下执行此操作。将它们放入回调学习如何处理AJAX中的第一个a代表什么。。。异步的。。。顺便说一下,您得到的不是一个错误,而是一个警告,因此您的代码可以按照您希望的方式工作。接下来要学习的是在不使用jQuery的情况下执行此操作。
import memoryless from "res/gen/memoryless/script.js"