当我的网站首先初始化,它查询服务器来取回一些数据。 直到这个数据回来,我不能在页面上放置任何东西了。 随着d3.js,我可以使用d3.json()来得到我的数据,但由于它是异步的,我需要把整个页面逻辑的回调函数。 我如何请求数据,并等待它回来?
Answer 1:
你基本上是这样做的唯一途径。 回调函数是一个开始你的代码的其余部分。 你不需要在回调函数中所有的代码虽然,你可以引入间接。 因此,回调函数将调用另一个函数内这将是目前什么是你的回调函数。
Answer 2:
使用JavaScript中同步请求不推荐,因为它会阻止整个主题并没有什么在此期间得到执行。 用户也不能与网页互动良好。
如果真的是你想要的,你可以做以下(使用jQuery):
var jsonData;
jQuery.ajax({
dataType: "json",
url: "jsondatafile.json",
async: false
success: function(data){jsonData = data}
});
但是不推荐,甚至jQuery的,如下解释jQuery.ajax()文档 :
Ajax中的第一个字母代表“异步”,这意味着在并行时执行的操作和完成的顺序不被保证。 async选项以$阿贾克斯()默认为true,表示执行代码可以继续发出请求之后。 这个选项设置为false(从而使通话不再异步)的强烈反对,因为它会导致浏览器无响应。
最后一点,我看不出有什么阻止你使用任何功能没有在success
以异步方式属性。 大多数时候改变你的设计中使用异步请求的将是值得的。 根据经验,调试使用同步请求一个页面是一个痛苦(尤其是在请求没有得到回答......)。
文章来源: How do I load JSON data synchronously with d3.js?