0

我想通过 doGet 请求从 servlet 传递 json 来使用 d3 动态可视化一些 java 代码的输出...

我知道我可以通过这样做使用 d3 发出 HTTP 请求......

d3.json("data.js", function(data) { alert(data.length) });

但是,我想每秒更新一次可视化。调用回调函数会执行另一个请求并接收一个新的 json 对象,还是只使用我第一次收到的 json?

我正计划使用 js 计时器每秒左右请求新的 json ......想看看我是否可以使用回调函数接收更新的 json。谢谢!

4

1 回答 1

0

调用d3.json(<url>, <callback>)执行异步请求。所以你需要每秒调用一次:

setInterval(function() {
  d3.json(<url>, <callback>);
}, 1000);

但是,如果服务器响应缓慢,则可能会导致请求积压。相反,您可以在每次收到数据时请求更多数据:

fetch();
function fetch() {
  d3.json("more.json", function(json) {
    // Update visualisation here…
    setTimeout(fetch, 1000); // fetch more data after 1000ms
  });
}

另一方面,如果有错误响应,这将停止请求数据(因为 D3.js 目前不会告诉您是否发生错误)。如果要处理错误,可以直接使用 XMLHttpRequest。

于 2012-07-18T09:59:49.113 回答