Google可视化查询 - 中止请求

时间:2014-07-01 15:39:34

标签: javascript ajax google-visualization google-query-language

我正在开发一个包含多个高强度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()来取消请求(尽管这仍然会在服务器上处理,但这是我愿意接受的打击)。不幸的是,我没有找到这方面的例子,Google文档在这方面的帮助不大。有没有人遇到过同样的问题,如果有的话 - 他们有没有解决问题呢?

干杯,

克里斯。

1 个答案:

答案 0 :(得分: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;
  };
};