0

我正在开发一个包含几个高强度 SQL 查询的界面,然后使用 google.visualization.Query 对象呈现当前通过 AJAX 调用的多个 Google 图表:

var query = new google.visualization.Query('/report.ashx');
query.send(callbackMethod);
//....
function callbackMethod(rs){
    var data = rs.getDataTable();
    var graph = new google.visualization.AreaChart(target_div);
    graph.draw(data);
}

由于可以动态过滤界面,我遇到了可以运行查询的场景,而用户可能会选择重新过滤并因此重新查询数据源。如果第一个查询仍在运行并且第二个查询在第一个查询之前开始并返回,那么图表将被绘制得很好。但是,当第一个查询最终完成时,它可能会用旧数据完全覆盖图表,而忽略当前的过滤器。

我已经读到有能力传递一个 jQuery AJAX 对象,它公开了一个 XHR 对象,允许我在 XHR 上调用 .abort() 这将取消请求(尽管这仍然会在服务器上处理,但这是一个打我愿意接受)。不幸的是,我找不到这方面的例子,而且谷歌文档在这方面也没什么帮助。有没有人遇到过同样的情况,如果是这样 - 他们解决了问题吗?

干杯,

克里斯。

4

1 回答 1

0

您可以包装callbackMethod一个更高阶的函数来跟踪请求时间,并使用query.send(callback())而不是query.send(callbackMethod).

var mostRecentReqTime;
var callback = function() {
  var reqTime = Date();
  return function() {
    if (reqTime < mostRecentReqTime) return;
    var data = rs.getDataTable();
    var graph = new google.visualization.AreaChart(target_div);
    graph.draw(data);
    mostRecentReqTime = reqTime;
  };
};
于 2014-07-01T16:28:35.147 回答