10

当我的网站第一次初始化时,它会查询服务器以取回一些数据。在此数据返回之前,我无法在页面上布置任何内容。使用 d3.js,我可以使用 d3.json() 来获取我的数据,但是因为它是异步的,我需要将整个页面逻辑放在回调函数中。如何请求数据并等待它返回?

4

2 回答 2

4

你基本上是这样做的唯一方法。回调函数必须是启动其余代码的那个。但是,您不需要回调函数中的所有代码,您可以引入间接。因此,回调函数将调用另一个函数,该函数将是当前回调函数中的内容。

于 2013-03-07T02:10:48.173 回答
4

不建议在 JavaScript 中使用同步请求,因为它会阻塞整个线程并且在此期间什么都做不了。用户也不能很好地与网页交互。

如果它真的是您想要的,您可以执行以下操作(使用 jQuery):

var jsonData;
jQuery.ajax({
  dataType: "json",
  url: "jsondatafile.json",
  async: false
  success: function(data){jsonData = data}
});

但是,即使是 jQuery,也不建议这样做,正如此处jQuery.ajax() 文档所解释的那样:

Ajax 中的第一个字母代表“异步”,这意味着操作是并行发生的,并且不保证完成的顺序。$.ajax() 的 async 选项默认为 true,表示在发出请求后可以继续执行代码。强烈建议不要将此选项设置为 false(从而使调用不再是异步的),因为它可能导致浏览器无响应。

最后一点,我看不出是什么阻止您success以异步方式使用属性中的任何函数。大多数时候,将设计更改为使用异步请求都是值得的。根据经验,调试使用同步请求的页面是一件痛苦的事(尤其是当请求没有得到答复时......)。

于 2013-05-09T06:07:18.883 回答