仅在文件加载后调用AJAX“后果”

时间:2013-11-30 23:36:39

标签: javascript jquery ajax

我有以下代码:

Aventura.prototype.loadMap = function(u,f) {
  var av = this;
  $.getJSON("js/aventura/"+u+"/"+f, (function(data) { av.map = data; }));
};

它在目录f中获取JSON文件u,并在加载时将window.Aventura.map设置为JSON响应。 这里的一切都运行良好,直到某些代码依赖于Aventura.map 。问题是我有这个init函数来设置对象:

Aventura.prototype.init = function(u,f) {
  this.loadMap(u,f);
  this.testRAF();
  this.buildEnv();
  this.generate();
  this.startEventListeners();
  this.resize();
  this.activateWidgets();
};

Aventura.buildEnvAventura.generate都需要设置Aventura.map。如何制作它以便它们仅在Aventura.loadMap完成后执行?我仍然需要所有这些都是异步的,我不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:1)

如果Aventura对象的初始化依赖于异步检索的数据,那么除了在HTTP请求返回后推迟Aventura对象本身的初始化之外别无选择。

一个可能的变体可能是将结果放在加载主脚本的相同资源中,并在加载的DOM上初始化av

<html>
<head>
  <script src="app.js"></script>
</head>
<body>
  <script id="map-data" lang="application/json">
    // json encoded data here
  </script>
</body>
</html>

注意它是相同的概念:一旦你收集了所需的信息,就会初始化对象。